分类 Python 下的文章

Linux | Python3.10.13源码编译安装


需求

最近再适配统信的机器,但是统信的源里的软件都不是最新的,python最高版本就能支持到3.7。然而这边的三方需要的python版本是3.10的,而且需要dev版本,就需要自己重新编译了。

基础依赖环境安装

sudo apt install libffi-dev tcl-dev tk-dev libbz2-dev zlib1g-dev libsqlit3-dev libxml2-dev libssl-dev libxslt1-dev liblzma-dev libreadline-dev llvm libncurses5-dev libncursesw5-dev xz-utils libgdbm-dev libncurses-dev

编译及安装

cas_user@casuser:/data/home/cas_user/code/$ tar -zxvf Python-3.10.13.tgz  # 解压
cas_user@casuser:/data/home/cas_user/code/$ cd Python-3.10.13
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ ./configure --prefix=/home/user/python_install_path --enable-shared CFLAGS=-fPIC  # 配置参数
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ make -j8 && sudo make install  # 编译及安装

配置参数解析

配置项解释
--prefix=path指定安装目录
--enable-shared生成.so动态库
CFLAGS=-fPIC编译选项
--enable-optimizations启用优化

其他参数以后补充。


python: 解压缩rar


问题

所里换了台新电脑,好多环境都要重新配置,之前跟新包提交git已经脚本化,配置的那叫一个舒爽,换完电脑都要重新配置,这里记录一下过程,省着以后又得重新上网找。

下载UnRar

rar官网:点击此处访问
UnRarDLL下载:点击此处下载

安装

直接执行下载包,默认路径C:Program Files (x86)UnrarDLL,默认安装即可

添加环境变量

cmd执行(64位系统):

setx "UNRAR_LIB_PATH" "C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll" /m

cmd执行(32位系统):

setx "UNRAR_LIB_PATH" "C:\Program Files (x86)\UnrarDLL\UnRAR.dll" /m

引号防止空格有问题,/m 指的是添加到系统变量中。

添加成功后再打开系统的环境变量如下图:
屏幕截图 2023-01-07 100420.png

python 安装 unrar

pip install unrar

python解压代码

from unrar import rarfile

def decompression(souce_path,target_path):
    shutil.rmtree(target_path)
    os.mkdir(target_path)
    rar=rarfile.RarFile(souce_path)
    print("开始解压文件")
    # 判断同名文件夹是否存在,若不存在则创建同名文件夹
    # print(os.path.splitext(souce_path))
    if os.path.isdir(target_path):
        rf_list = rar.namelist() # 得到压缩包里所有的文件 
        # print('rar文件内容', rf_list) 
    else:
        os.mkdir(target_path)
    rar.extractall(target_path) # 解压文件
    print("文件解压成功")

def main(argv):
    decompression("E:\\test.rar", "E:\\test\\")

TensorFlow: 环境安装(win+python+TensorFlow+CUDA+CUDNN)


需求

在家呆的时间打算学习一下AI,在网上查了挺多机器学习的,最后选择了TensorFlow。主要目的是给自己生成一套神经网络,留着以后用。

基础

本身电脑Win10 1660显卡一张。

环境

Python: 3.8.1
TensorFlow-GPU: 2.6.0
CUDA: 11.4.1
CUDNN: 11.4

环境安装过程

  1. Python

python是开发人员的必备品,已经安装过了,这里就不做介绍了,自行百度。

  1. TensorFlow-GPU

开源的计算机学习平台,安装比较简单,python下的pip可直接安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade tensorflow-gpu

命令解析:

pip python包管理器
install 安装
-i 临时指定安装源,这里选的是清华的源,要不下载太慢
--upgrade 顺带更新
tensorflow-gpu 软件包名称

微信图片_20210905193133.png
微信图片_20210905193204.png

然后尝试使用tensorflow,python命令行模式下引入此库。

import tensorflow as tf

没有安装CUDA和CUDNN的情况下会出现报错,如下图:
微信图片_20210905193427.png

  1. 安装CUDA
    进入英伟达开发者中心下载:CUDA Toolkit Archive阿里云盘

下载后点击会先把安装文件解压到指定目录,之后才会真正的安装。

安装图示:
微信图片_20210905193821.png
微信图片_20210905193826.png

  1. 安装CUDNN
    进入英伟达开发者中心下载:cuDNN Archive

下载后需要解压到CUDA的安装目录中。
微信图片编辑_20210905194212.jpg

  1. 环境变量配置
    右键此电脑-》高级系统设置(右边小字)-》高级-》环境变量-》系统变量Path

微信图片编辑_20210905195206.jpg

检查变量

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\libnvvp
C:\Program Files\NVIDIA Corporation\Nsight Compute 2021.2.1\
// C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\lib\x64

头三个是安装完CUDA时候自动添加,最后一个需要手动添加
微信图片编辑_20210905195350.jpg

最后所有环境处理完毕,入门就是Hello World

代码:

import tensorflow.compat.v1 as tf   #解决 module ‘tensorflow’ has no attribute ‘Session’
#import tensorflow as tf

tf.compat.v1.disable_eager_execution()  #解决报错:runtimeerror: the session graph is empty. add operations to the graph before calling run()
hello = tf.constant('Hello world')

sess = tf.Session()

with tf.Session() as sess:
    print(sess.run(hello).decode())

sess.close()

微信图片编辑_20210905201356.jpg


Python:解决pip安装时速度慢的问题


国内源:

新版ubuntu要求使用https源,要注意。

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

临时使用:

可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade tensorflow-gpu,这样就会从清华这边的镜像去安装tensorflow-gpu。

永久修改:

Linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)

内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
windows下,直接在user目录中创建一个pip目录,如:C:Usersxxpip,新建文件pip.ini。内容同上。


Python: 扫面网段+ssh连接执行命令


前言

有个小想法需要去实现,具体是扫描一个网段,找到那个开着ssh端口的ip,然后用现有的密钥连接或者用密码本连接。

涉及到的知识点

  • paramiko
  • socket
  • IPy

代码片段解析

整体代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
 
import paramiko
import socket
import time
import sys
import IPy

def sshexeccmd(ip,cmd):
    try:

        ssh = paramiko.SSHClient()
        #add to host_allow
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        # pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='yourpassword')
        pkey = paramiko.RSAKey.from_private_key_file('c:/Users/QY/Desktop/id_rsa')

        ssh.connect(hostname=ip,
                    port=22,
                    username='root',
                    pkey=pkey)

        stdin, stdout, stderr = ssh.exec_command(cmd)

        print(stdout.read())
        print(stderr.read())

        ssh.close()
    except Exception as e:
        print(e)


def portScanner(ip,port):
    server = (ip,port)
    sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sockfd.settimeout(0.1)
    ret = sockfd.connect_ex(server)  #返回0则成功
    if not ret:
        sockfd.close()
        print('%s:%s is opened...' % (ip,port))
        return True
    else:
        sockfd.close()
        return False
        pass

if __name__ =='__main__':
    if len(sys.argv) != 4:
        print('python pyfile ip/24 port cmd')
        sys.exit()
    print('-' * 100)
    print('HOST: %s' % sys.argv[1])
    print('PORT: %s' % sys.argv[2])
    print('CMD: %s' % sys.argv[3])
    ips = IPy.IP(sys.argv[1])
    print('将要扫面 %s 个IP' % len(ips))
    for ip in ips:
        print("/*****%s*****/" % ip.strNormal(0))
        if portScanner(ip.strNormal(0),int(sys.argv[2])):
            print("开始对其进行ssh处理")
            sshexeccmd(ip.strNormal(0),sys.argv[3])
        print("/***********************/")
    # sshexeccmd(sys.argv[1],sys.argv[2])
    print('-' * 100)