一、下载python3.8.2版本的压缩包

链接:https://pan.baidu.com/s/19TQjJHilJOTKQOVnc0chHg
提取码:oxzo

二、下载完成后解压,进入Python-3.8.2文件夹,编译安装

tar -xf Python-3.8.2.tgz
cd Python-3.8.2/ 

依次执行以下三个操作(https://blog.csdn.net/tanmx219/article/details/86518446)

./configure --prefix=/usr/local --with-pydebug --enable-shared CFLAGS=-fPIC

make

make install

configure参数说明:

【其中/usr/local是安装目录,当然你完全可以选其他的地方,如果你需要学习Python源码,那就要调试版,此时要加上--with-pydebug,更详细的过程可以参考官方说明:https://devguide.python.org/
补充:这里加上--enable-shared和-fPIC之后可以将python3的动态链接库编译出来,默认情况编译完lib下面只有python3.xm.a这样的文件,python本身可以正常使用,但是如果编译第三方库需要python接口的比如caffe等,则会报错;所以这里建议按照上面的方式配置,另外如果openssl不使用系统yum安装的,而是使用自己编译的比较新的版本可以使用--with-openssl=/usr/local/openssl这种方式指定,后面目录为openssl实际安装的目录,另外编译完还要将openssl的lib目录加入ld运行时目录中即可. 】

在执行make过程中会出现很多问题,这些问题一定要一一排查解决:

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel      
_dbm                  _gdbm                 _hashlib           
_lzma                 _sqlite3              _ssl               
_tkinter              _uuid                 readline           
zlib                                                           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  atexit                pwd                
time                                                           


Failed to build these modules:
_ctypes                                                        


Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

yum install libffi-devel -y 命令来安装_ctypes模块
yum install readline-devel -y 命令来安装readline模块
yum install zlib zlib-devel -y 命令来安装zlib模块
yum install python3-tkinter tkinter tcl-devel tk-devel -y 命令来安装_tkinter模块
yum install xz-devel lzma -y 命令来安装_lzma模块
yum install libuuid uuid-devel -y 命令来安装_uuid模块
yum install sqlite-devel -y 命令来安装 _sqlite3模块
yum install gdbm-devel -y 命令来安装 _dbm、_gdbm模块
yum install ncurses-devel -y 命令来安装 _curses、_curses_panel 模块
yum install openssl-devel -y 命令来安装 _ssl模块

全部依赖组件安装:

yum -y install gcc gcc-c++ zlib zlib-devel libffi-devel
yum -y install gcc kernel-devel kenel-headers make bzip2
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

安装libressl-2.6.4以上版本的依赖模块
安装教程:https://blog.csdn.net/scorpio921/article/details/82682757
下载地址:链接:https://pan.baidu.com/s/16MdU8orh4AHUpc7jVIU0Fw
提取码:ezbt

编译错误1:

/home/Python-3.8.2/Modules/_uuidmodule.c:19:5: error: unknown type name ‘uuid_t’
     uuid_t uuid;
     ^
/home/Python-3.8.2/Modules/_uuidmodule.c:36:5: error: implicit declaration of function ‘uuid_generate_time’ [-Werror=implicit-function-declaration]
     uuid_generate_time(uuid);

解决方法:

网上https://my.oschina.net/mengyoufengyu/blog/2876198说,添加环境变量,执行了一下命令,但不起作用

vim ~/.bash_profile
添加一行 export CPPFLAGS=" -Wno-error=coverage-mismatch" 保存退出
source ~/.bash_profile

最终用以下方法https://zhuanlan.zhihu.com/p/120341207解决:
对_uuidmodule.c文件进行修改:
cd Python-3.8.2/Modules
vi _uuidmodule.c

#include "Python.h"
/* #ifdef HAVE_UUID_UUID_H */
#include <uuid/uuid.h>
/* #elif defined(HAVE_UUID_H)
#include <uuid.h>
#endif */

编译错误2:

/home/Python-3.8.2/Modules/_cursesmodule.c:3240:5: error: implicit declaration of function ‘setupterm’ [-Werror=implicit-function-declaration]
     if (!initialised_setupterm && setupterm((char *)term, fd, &err) == ERR) {

解决方法:

参考https://my.oschina.net/mengyoufengyu/blog/2876198
cd Python-3.8.2
sed -i "s/Werror=implicit-function-declaration/Wno-error/g" configure
make clean
make

编译成功提示:

安装成功提示:

......
Looking in links: /tmp/tmpsqv00cbn
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-19.2.3 setuptools-41.2.0

安装成功之后,安装目录就在/usr/local/

查看python版本:

[root@localhost bin]# python -V
Python 2.7.5
[root@localhost bin]# python3 -V
Python 3.8.2
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐