Ubuntu源码编译安装Python3.8 3.9
一、下载源码
1.1 国外官方站,下载:
3.8:https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz
3.9:https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz
1.2 国内镜像站,下载:
https://www.cnblogs.com/wutou/p/17709685.html
二、配置编译参数说明
1. 指定Python的安装目录:
--prefix:指定安装目录
例如:
./configure --prefix=/usr/local/python3817
这将把 Python 3.8 安装在 /usr/local/python3817 目录下。
2. 启用优化:
--enable-optimizations
例如:
./configure --prefix=/usr/local/python3817 --enable-optimizations
这将在编译Python时启用优化选项,提高Python的运行效率。
3. 启用共享库:
这将在编译Python时生成共享库,方便其他程序共享Python的库文件。
--enable-shared
例如:
./configure --prefix=/usr/local/python3817 --enable-optimizations --enable-shared
4. 指定OpenSSL库的路径
如果需要使用SSL加密功能。
这将在编译Python时链接指定的OpenSSL库,以支持SSL加密功能。
--with-openssl
例如:
./configure --prefix=/usr/local/python3817 --enable-optimizations --enable-shared --with-openssl=/usr
注意:--with-openssl 需要的是源码文件,openssl/ssl.h 头文件,不要指定 bin 目录,ubuntu1804下 /usr 这个建议不要修改[注]
5. 不显示 Warning 警告信息
--no-warn
6. 加载 libsqlite3-dev 依赖 [注1] [注2]
--enable-loadable-sqlite-extensions
三、编译
1.依赖安装
sudo apt-get install zlib1g-dev tcl-dev tk-dev libsqlite3-dev libbz2-dev libffi-dev
libbz2-dev、libffi-dev 是 pandas 用到
2.生成 Makefile 配置
./configure --prefix=/usr/local/python3817 --enable-optimizations --enable-shared --with-openssl=/usr
3.编译,执行 Makefile
make
4.安装
sudo make install
或
sudo make altinstall
使用标准的 make install,它将覆盖默认的系统 python3 二进制文件
四、创建软链接
1.备份原来 python3 链接
sudo mv /usr/bin/python3{,.bak}
sudo mv /usr/bin/pip3{,.bak}
2.创建 bin 文件软连接,让 python3 命令可以在终端任何文件夹使用
创建 python3 命令软连接
sudo ln -s /usr/local/python3817/bin/python3.8 /usr/bin/python3
创建 pip 命令软连接:
sudo ln -s /usr/local/python3817/bin/pip3.8 /usr/bin/pip3
3.创建 so 库软链接
sudo ln -s /usr/local/python3817/lib/libpython3.8.so /usr/lib/libpython3.8.so.1.0
sudo ln -s /usr/local/python3817/lib/libpython3.8.so /usr/lib32/libpython3.8.so.1.0
五、修改 pip 源
更改pip源,不论pip还是pip3都是再用户目录下创建pip.conf文件:
mkdir ~/.pip
vim ~/.pip/pip.conf
pip.conf写入:
[global]
timeout = 6000
index-url = http://mirrors.aliyun.com/pypi/simple/
trusted-host = pypi.tuna.tsinghua.edu.cn
六、查看版本
python3 -V
或
python3 --version
七、卸载
如果发现这个软件并不是那么稳定好使,
想要卸载它就难了,如果当时安装编译的源代码文件还在的话可以进入源代码目录,
编译之后除了会生成install脚本之外还会生成一个uninstall 脚本,因此我们使用 [注]
sudo make uninstall
或
如果你知道且确定文件夹在哪个目录(--prefix=/usr/local/python3817 这个参数指定的目录),直接删文件夹和 ln 软链接就可以了 [注]
八、错误记录
1.错误: [注]
zipimport.ZipImportError: can't decompress data; zlib not available
Makefile:1186: recipe for target 'install' failed
make: *** [install] Error 1
解决方法:
sudo apt-get install zlib1g-dev
2.错误: [注]
python3: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory
解决方法:按上面4.3创建软链接
3.错误:
python INFO: Can't locate Tcl/Tk libs and/or headers
解决方法:[注]
sudo apt-get install tcl-dev tk-dev
4.错误 [注]
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 27, in <module>
from CommandNotFound.util import crash_guard
ModuleNotFoundError: No module named 'CommandNotFound'
解决方法:https://www.cnblogs.com/wutou/p/17526402.html
5.错误
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
解决方法:
cd /usr/local/
sudo ln -s /usr/bin/openssl openssl
6.错误
ERROR: Can not execute setup.py
since setuptools is not available in the build environment
解决方法:
更新setuptools
py2:
pip install --upgrade setuptools
py3:
pip3 install --upgrade setuptools
注意:提示没有权限,加 sudo
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev
sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
sudo apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev
sudo apt-get install --reinstall zlibc zlib1g zlib1g-dev
一次可能无法成功,可以三行换顺序执行一下【注】
--reinstall 重新安装 [注1] [注2]
参考:
https://blog.sacus.top/archives/1223 (编译参数)
https://blog.csdn.net/somken/article/details/128775179 (推荐 make altinstall )
https://blog.csdn.net/xujianjun229/article/details/118500154