序:
公司测试机安装Python3一直报错,记录一下。
1. 安装pyenv
# 1. 安装 pyenv(需先装编译依赖,同上) # curl https://pyenv.run | bash git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv # 2. 配置环境变量(加到 ~/.bashrc) echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc # 3. 安装任意版本 # # 这里install会报错,需要先解决 # 这里install会报错,需要先解决 # 这里install会报错,需要先解决 pyenv install 3.13.2 # 4. 设置全局 / 项目级版本 pyenv global 3.13.2 # 全局默认 # pyenv local 3.13.2 # 当前目录用 3.11 # 5. 验证 python -V2. 检测openssl版本
[root@docker ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017AlibabaCloudLinux2对应的openssl版本为1.0.2,而Python 3.13 安装要求 SSL 最低版本要求 1.1.1
解决方案::
# 先确认系统当前版本 openssl version # 预期是 1.0.2k-fips # 搜索可用的 openssl11 包 yum search openssl11 # 安装(存在的话,这是最干净的方案) yum install -y openssl11 openssl11-devel # 验证,路径通常在 /usr/lib64/openssl11 或 /usr/local/openssl11 rpm -ql openssl11-devel | grep -E "\.h$|libssl" | head ## 确认openssl11的真实位置 # 不限深度,找 1.1.1 的头文件 find /usr/include -name "ssl.h" 2>/dev/null # 直接看这两个可能的目录 ls /usr/include/openssl11/ 2>/dev/null ls /usr/include/openssl11/openssl/ 2>/dev/null | head # 顺便确认 pkg-config 文件 find /usr -name "openssl*.pc" 2>/dev/null3. 检测sqlite3版本
[root@ali33 ~]# sqlite3 --version 3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668AlibabaCloudLinux2对应的sqlite-devel版本为3.7.17,而Python 3.13 官方已把 SQLite 最低版本要求提升到 3.15.2
解决方案::
yum install -y sqlite-devel # 一次装齐所有常见依赖,避免再来回返工 yum install -y bzip2-devel libffi-devel xz-devel \ readline-devel ncurses-devel tk-devel zlib-devel gdbm-devel # 编译依赖(一般已有) yum install -y gcc make cd /usr/local/src wget https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz tar -xzf sqlite-autoconf-3460100.tar.gz cd sqlite-autoconf-3460100 # 关键:--prefix 指向独立目录,绝不覆盖系统的 /usr/lib64/libsqlite3.so ./configure --prefix=/usr/local/sqlite3 make -j$(nproc) && make install # 验证 /usr/local/sqlite3/bin/sqlite3 --version # 3.46.1 ## 注意这里pwd的路径变了,等会安装的时候要回去 ## 注意这里pwd的路径变了,等会安装的时候要回去 ## 注意这里pwd的路径变了,等会安装的时候要回去4. 安装
一般来说,最大问题就是openssl和sqlite3,其他可能会遇到 pyenv install巨慢,可以提前下好安装包放置在 .pyenv文件夹内的cache文件夹内
[root@ali33 ~]# cd .pyenv/cache [root@ali33 cache]# ll total 22092 -rw-r--r-- 1 root root 22621108 Oct 28 15:38 Python-3.13.2.tar.xz下载地址:
https://mirrors.aliyun.com/python-release/source/Python-3.13.2.tar.xz?spm=a2c6h.25603864.0.0.369128f4Vy0UNK
pyenv uninstall 3.13.2 rm -rf /tmp/python-build.* export CPPFLAGS="-I/usr/local/sqlite3/include -I/usr/include/openssl11" export LDFLAGS="-L/usr/local/sqlite3/lib -Wl,-rpath,/usr/local/sqlite3/lib \ -L/usr/lib64/openssl11 -Wl,-rpath,/usr/lib64/openssl11" export PKG_CONFIG_PATH="/usr/local/sqlite3/lib/pkgconfig:/usr/lib64/pkgconfig" pyenv install 3.13.2 -v #耐心等待安装,看看有没有错误注意:以上都需要在同一个终端里连续执行,不要切换新终端