debian8安装python3.7

Debian默认安装的python版本分别是2.7和3.4,但是Python3.4都快要退出舞台了,为了项目需求得提升一下python版本,想来想去最好还是用最新版本的python吧.

为了防止因卸载老版本python系统出错,所以老版本python就不卸载了,直接安装新版本python

编译安装python3.7.4,这里记录下安装过程.

安装

安装编译依赖的包

1
apt-get install build-essential libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev ca-certificates -y

下载源码包

1
2
3
4
5
6
7
8
9
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
tar xf Python-*.tar.xz
cd Python-*
./configure --prefix=/usr/local/python3.7
make
make install

安装完成后执行make clean

配置

1
2
ln -s /usr/local/python3.7/bin/python3 /usr/local/bin/python37
ln -s /usr/local/python3.7/bin/pip3 /usr/local/bin/pip37

报错解决方法

ModuleNotFoundError: No module named ‘_ctypes’

3.7版本需要一个新的包libffi-devel,要执行下面的命令

1
apt-get install libffi-dev
Fatal Python error: _PySys_BeginInit: can’t initialize sys module

./configure --enable-optimizations编译有时会报错,可能是系统或者gcc的原因,编译的时候去掉--enable-optimizations就好了.

安装python3.7后发现使用pip会出现如下报错:
1
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

python3.7需要的openssl的版本为1.0.2或者1.1.x,需要对openssl进行升级,并重新编译python3.7.4

下载最新的openssl

1
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1b.tar.gz

编译安装

1
2
3
4
5
tar xf openssl*.tar.gz
cd open*
./config --prefix=/usr/local/openssl no-zlib #不需要zlib
make
make install

备份原配置

1
2
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl/ /usr/include/openssl.bak

新版配置
1
2
3
4
5
#将安装好的openssl 的openssl命令软连到/usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

#将安装好的openssl命令软连到/usr/bin/openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

修改系统配置
1
2
3
4
#写入openssl库文件的搜索路径
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
#使修改后的/etc/ld.so.conf生效
ldconfig -v

查看openssl版本

之后重新编译安装python3.7

注意:需要指定openssl的安装路径,--with-openssl

1
2
3
./configure --prefix=/usr/local/python3.7 --with-openssl=/usr/local/openssl
make
make install