直接使用源码安装其实挺方便的.

以下例子将下载 Python 3.7.4, 若需要其他版本, 请在 官方下载 里选择.

wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
tar -zxvf Python-3.7.4.tgz
cd Python-3.7.4

源码安装前, 可能需要安装的库:

sudo yum install openssl-devel -y   # make ssl module available
sudo yum install libffi-devel -y    # to avoid "_ctypes" missing error
sudo yum install zlib-devel -y      # to avoid "zlib" missing error

其实这几个库都是为了解决 pip3 的相关问题:

  • 如果没有 openssl-devel, 那么 pip3 在安装库的时候可能会报 SSL 相关错误
  • 如果没有 libffi-develzlib-devel 那么 pip3 将无法编译(如果环境有这两个依赖存在, 编译 Python3 的时候将自动成功编译 pip3, 并在 make install 的时候拷贝到可执行目录下)

安装完上述几个个依赖后, 解压源码, 进入解压后的文件夹, 按照 Linux 安装软件的惯例:

./configure
make
sudo make install  # install needs sudo. this will also install pip3

执行完上述的步骤后, 会把源码文件夹下的编译出来的 python 安装到 /usr/local/bin/python3. 注意到这里是重命名过的, 可以与系统自带的 /usr/bin/python 区分开来, 所以安装的时候大可放心, 因为不会与系统版本冲突.

同时, 只要在编译 python 的时候没有缺少什么特别的库(因为最开始已经安装了依赖库, 应该是不会缺乏了, 如果实在有缺乏, 再安装编译即可), 在执行 make install 的时候理论上是会自动安装 pip3/usr/local/bin/pip3, 这里同样会和 Python2.X 用的 /usr/bin/pip 区分开来, 方便使用.


解决 sqlite3 版本过低的问题(重新 build Python3):

# export C_INCLUDE_PATH=/PATH_TO_SQLITE/include
# export CPLUS_INCLUDE_PATH=/PATH_TO_SQLITE/include 
# export LD_RUN_PATH=/PATH_TO_SQLITE/lib
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include
export LD_RUN_PATH=/usr/local/lib
./configure
make
sudo make install

# 下面这个可能也需要(build 的时候不需要)
export LD_LIBRARY_PATH="/usr/local/lib"

Refer: https://stackoverflow.com/a/73449169/4156036

Comments
Write a Comment