环境准备
系统环境:使用 CentOS-7-x86_64-Minimal 最小化安装;
Python版本:Python-3.7.4
安装方式:Python-3.7.4.tar.xz 源码包编译安装
因为是刚安装的环境,需要初始化安装一些常用工具:
yum install vim
yum install wget
yum install lrzsz # 非必选
先上图,随后开始安装流程:
安装依赖包
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
下载源码包
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz # 官网下载方式
官网下载速度慢,可以先下载到本地,再通过上面可选的小工具rz到linux目录下。
编译安装
[root@C100 ~]# tar -xvJf Python-3.7.0a1.tar.xz # 解压
[root@C100 ~]# cd Python-3.7.4
[root@C100 Python-3.7.4]# ./configure --prefix=/usr/local/bin/python3.7.4 --enable-shared --enable-universalsdk --enable-optimizations # 设置编译环境
[root@C100 Python-3.7.4]# make
[root@C100 Python-3.7.4]# make install
解释下几个参数:
- --prefix=/usr/local/bin/python3.7.4 # 指定安装路径;
- --enable-shared # 确保 python 会创建共享库(shared library),否则只会创建静态库(static library)。启用共享,方便其他依赖 python 的一些内置库 (比如 mysqlclient) 的资源的正常安装;
- --enable-universalsdk # 确保 python3 的源码包被编译成64位的库;
- --enable-optimizations # 应用优化选项 (LTO,PGO等),官方数据加上这个 flag 编译后,性能有 10% 左右的优化。
创建软链接
ln -s /usr/local/bin/python3.7.4/bin/python3 /usr/bin/python3
ln -s /usr/local/bin/python3.7.4/bin/pip3 /usr/bin/pip3
保留系统默认的 python2 环境,只将 python3 添加到 /usr/bin/ 路径下
解决问题
- 解决缺少so文件的报错:
[root@C100 Python-3.7.4]# python3 -V
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
解析:这是因为动态库文件 libpython3.7m.so.1.0 只被安装到了前面设置的软件路径下,而非系统默认的库路径
解决方法:
思路一:创建一个从 so 文件到 /usr/lib64/ 的软连接,或者直接将编译出来的 so 文件直接复制一份过去
[root@C100 Python-3.7.4]# cp libpython3.7m.so.1.0 /usr/lib64/
思路二:将 python3 的 lib 库所在路径加入到系统 so 动态库路径 /etc/ld.so.conf.d/ 中
[root@C100 ~]# echo '/usr/local/bin/python3.7.4/lib' > /etc/ld.so.conf.d/python3.7.conf
[root@C100 ~]# ldconfig
[root@C100 ~]# ldconfig -p | grep python # 检查是否生效
2019年8月18日,更新软件版本和截图信息
本文由 SHIYL 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Aug 18, 2019 at 04:01 am
设置 ./configure --prefix=/usr/local/ 可以避免后续一些麻烦
ln -s /usr/local/lib/libpython3.7m.so.1.0 /usr/lib64/libpython3.7m.so.1.0