CentOS下源码编译安装Python3

编译安装openssl

给python3源码编译安装专属的openssl版本,避免和操作系统的openssl冲突,且方便迁移。 另外经测试通过yum安装的openssl-devel,python3.x是无法正常导入ssl模块的。

mkdir /usr/local/python3

wget -c https://www.openssl.org/source/openssl-1.1.1c.tar.gz
tar zxf openssl-1.1.1c.tar.gz
cd openssl-1.1.1c
./config --prefix=/usr/local/python3/openssl shared zlib
make -j 24
sudo make install

编译安装Python3

yum install -y zlib-devel sqlite-devel readline-devel unzip libffi-devel

wget https://www.python.org/ftp/python/3.x.0/Python-3.x.0.tgz

tar zxf Python-3.x.0.tgz
cd Python-3.x.0

./configure --prefix=/usr/local/python3 \
        --enable-shared \  # 这个我是为了支持vim插件YouCompleteMe
        CFLAGS="-I/usr/local/python3/openssl/include" \
        LDFLAGS="-L/usr/local/python3/openssl/lib -Wl,-rpath,/usr/local/python3/openssl/lib"

make -j24
sudo make install

# 编译安装的时候--enable-shared, 所以这里必需设置, 否则python会报错
sudo echo "/usr/local/python3/lib" >/etc/ld.so.conf.d/python3.conf
sudo ldconfig

sudo ln -sf /usr/local/python3/bin/python3 /usr/local/bin/python3
sudo ln -sf /usr/local/python3/bin/pip3 /usr/local/bin/pip3

补充几点需要注意的:

  • 验证给python专门安装的openssl是否可用: python3 -m ssl 或者 python3 -c 'import ssl', 没有输出则表明ssl模块加载成功.
  • 在编译python的时候加--enable-optimizations选项来做优化性能,可用于生产环境.
  • 编译安装完python3后,可直接将/usr/local/python3目录打包拷贝到其他相同操作系统的服务器上,即可直接使用。

配置pip3

国内pip镜像源列表:

阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
# 即时使用方法
pip3 install readline -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

# 配置全局默认源
cat > /etc/pip.conf <<EOF
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
[list]
format = columns
EOF

# 只为当前用户配置默认源
mkdir -p ~/.pip/
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
EOF

# 升级pip
/usr/local/python3/bin/pip3 install --upgrade pip

virtualenv开发环境安装

一般是一个项目一个virtualenv环境.

# 创建虚拟环境
python3 -m venv ./py3env  # 默认不会把系统Python3的第三方包复制过来

# 进入虚拟环境
source py3env/bin/activate  # 现在使用python、pip默认就是python3的版本了

# 退出虚拟环境
deactivate