源码安装python

前端时间,在debian10的机器上要使用比较新的版本的python,因此需要自己手动去编译一个。python用的少,这次做了,就记录一下,以后再用,可以回头看看。

1. 在编译之前,最好安装好libffi-dev,比如需要使用pyinstaller时,如果没有安装这个东西,就会报错,No module named '_ctypes',到时候就需要重新编译,费事。因此在动手之前,先安装上。

2. 下载tar.xz的源码,tar -xf解压缩后,进入文件夹执行:

./configure --prefix=/usr/local/bin/python3.8.2/ --with-openssl=/usr/local/openssl/ --enable-shared

--prefix是安装目录

--enable-shared是编译后,会生成python的库。如果需要使用pyinstall来编译可执行程序,那么需要带上这个选项。编译好后,make Install。但是发现,没有将生成的libpython*.so放到系统常见的路径下,比如/lib/x86_64-linux-gnu/,而且因为这个导致python无法运行。在命令行调用python3 --version,就会报错,说找不到libpython3.8.so.1.0。所以,在编译完后,手动将libpython3.8.so.1.0拷贝到/lib/x86_64-linux-gnu/下。然后再运行python3 --version就没有问题了。

--with-openssl=/usr/local/openssl/ 这个是让编译生成的python支持ssl。务必带上这个,不然后面使用编译后的pip去下载包的时候,如果是公网,比如清华的,那就必须得支持ssl。另外/usr/local/openssl是ssl所在的路径。这个路径下包括bin(里面有openssl),还有lib(里面有libcrypto.so和libssl.so),编译的过程中会链接lib下的库。如果没有openssl,那么下载openssl的包,解压缩后:

./config --prefix=/usr/local/openssl

make

make install

这里--prefix后面的就是make install时openssl的安装目录。注意make install时权限问题,像上面安装到/usr/local/openssl下,需要root权限。

对了,除了添加 --with-openssl=/usr/local/openssl/ ,还需要修改在python源码下Modules文件夹下Setup文件,修改内容:

源码安装python_第1张图片

就是修改SSL,SSL=,“=”右边的是openssl所在的路径

在python源代码文件夹下做完./configure后,执行make & make install.

这里建议make之前做一下make clean。因为如果曾经做过make,不带ssl,现在这里带上ssl,不clean直接make,还是会报错,未定义的openssl的一些函数。后来make clean后,再make,就没有问题。

创建快捷方式:

ln -s /usr/local/bin/python3.8.2/bin/python3 /usr/bin/python3

ln -s /usr/local/bin/python3.8.2/bin/pip3 /usr/bin/pip

pip批量安装:

pip install -r requirements.txt

如果pip install报错,pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

原因就是python不支持openssl,需要重新编译python,带上openssl。

pip install时报错,ERROR: Can not execute `setup.py` since setuptools is not available 

这种情况下,需要安装setuptools,如下:

pip3 install --upgrade setuptools

你可能感兴趣的:(linux,python,linux)