CentOS7.7-Python3.8.1 源码编译安装

源码编译安装,作为比较高级的一点操作,流程时间长,但是在针对有的没有安装包的情况下,就需要我们用到此种编译技术,这是基于c语言编译成的可执行程序。如何编译安装源码包呢

一, 下载官网下载源码包

https://www.python.org/downloads/source/

此次选定的版本为最新版本的3.8.1 源码包,下载之后为一个 Python-3.8.1.tar.xz 包。 第一次遇到xz包,tar 直接解压是解压不了的。

xz命令 XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。

这种压缩技术采用了二次压缩,首先需要把xz包解压为 tar包

xz -d Python-3.8.1.tar.xz 得到 Python-3.8.1.tar文件,然后再 tar xf 正常解压 得到 Python-3.8.1 文件

查看源码包里面的README.rst 文件说明,找到安装流程和步骤:

On Unix, Linux, BSD, macOS, and Cygwin::

./configure
make
make test
make install

This will install Python as python3

转到Python源目录并运行configure脚本,该脚本执行许多检查以确保系统上的所有依赖项都存在,检查缺失的依赖。 运行之后发现缺少gcc等c编译器。

[root@localhost Python-3.8.1]# ./configure
checking build system type… x86_64-pc-linux-gnu
checking host system type… x86_64-pc-linux-gnu
checking for python3.8… no
checking for python3… no
checking for python… python
checking for –enable-universalsdk… no
checking for –with-universal-archs… no
checking MACHDEP… “linux”
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: in `/root/python3/Python-3.8.1′:
configure: error: no acceptable C compiler found in $PATH
See `config.log’ for more details
[root@localhost Python-3.8.1]#

安装gcc 和openssl-devel

yum -y install gcc openssl-devel

openssl-devel一定要在编译之前安装!!! 否则后面安装的时候找不到依赖包,就只能重新编译了

[root@localhost Python-3.8.1]# ./configure  --prefix=/usr/local/python3 --with-ssl

./configure --prefix=安装路径,这里建议安装在/usr/local/python3下面。

一定要执行以上命令, 这里指定--with-ssl参数, 使用ssl 进行

./configure过程中,如果没有加上–with-ssl参数时,默认安装的软件涉及到ssl的功能不可用,刚好pip3过程需要ssl模块,而由于没有指定,所以该功能不可用。 使用ssl 检查依赖准备情况。执行完命令之后,然后开始跑checking , 跑完之后 ,最后会出现下面的提示:

configure: creating ./config.status
config.status: creating Makefile.pre
config.status: creating Misc/python.pc
config.status: creating Misc/python-embed.pc
config.status: creating Misc/python-config.sh
config.status: creating Modules/ld_so_aix
config.status: creating pyconfig.h
configure: WARNING: unrecognized options: –with-ssl
creating Modules/Setup.local
creating Makefile

If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure –enable-optimizations

然后开始编译:

编译之前确认是否安装安装 readline 相关模块。readline 是 bash shell 用的库,包含许多使用功能,例如:命令行自动补全等。
如果没有安装,请执行:yum -y install readline readline-devel

再确认是否有zlib的相关工具包,否则:

zipimport.ZipImportError: can't decompress data; zlib not available
安装zlib相关依赖
yum -y install zlib*

查看安装的包 yum list installed |grep 包名

完成以上步骤之后,确认无误,然后开始编译

在源码包下,make ; 开始执行编译,编译时间取决于硬件配置,C 编译的速度

编译结果,提示编译成功,但是缺少一些模块。此时直接make install 安装可以,但是后面会出问题,而且缺少相关的模块,开发也会出问题

这是因为没有安装依赖开发库,则编译完成后会提示有些模块没有编译 根据上面提示 我缺少 这些模块。

_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _tkinter _uuid
readline

以及 _ctypes 模块

Failed to build these modules:
_ctypes

出现 _ctypes 是因为 在安装Python3.7以上版本时,需要一个新的libffi-devel包做依赖,执行命令安装 以上缺失的模块

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

yum -y install gcc kernel-devel kenel-headers make bzip2

yum -y install gcc gcc-c++ zlib zlib-devel libffi-devel

以上这些包,可以在编译之前就一次性安装完毕,免得在构建make 后出现错误再挨个找包资源。 安装这些包之后

make clean 清除刚刚构建的文件

make 再次构建 ,然后通过

make test 进行模拟测试安装

测试通过之后 make install

安装完成之后,如果没有异常,则启动Python3.8测试一下是否安装成功:
启动位置:/usr/local/python3/bin/python3

Python 3.8.1 (default, Feb 5 2020, 01:08:43)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

>>>

表明 安装成功,然后为python3 创建软链接

/usr/bin路径下生成Python3的软链接:

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

如图, 我装了两个python, 直接使用python 进入的是python2的环境,而新编译的python3.8.1 则是使用的新的环境,二者不影响。实现了两个版本的共存。

现在的python3 链接到python3.8

创建pip 的软连接

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

至此 ,源码编译python3.8.1 完成。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据