python制作env离线使用
处理思路:
编译依赖:在构建机上编译 Python 3.10.11 及其依赖的 OpenSSL 1.1.1(或其他兼容版本)。
集成 OpenSSL:将 OpenSSL 的共享库(libssl.so.1.1、libcrypto.so.1.1)复制到 Python 安装目录的 lib/ 子目录中。
安装应用依赖:使用该 Python 环境的 pip 安装项目所需的第三方包(如 requirements.txt 中定义的依赖)。
打包交付:将整个 Python 安装目录(含标准库、第三方包及 OpenSSL 库)打包为可移植环境,直接部署到目标机器即可运行。
遗留事项:
打包前应清理缓存文件(如 pycache、.pyc、pip 缓存等),以减小体积并避免潜在路径污染。
建议验证 _ssl 和 _hashlib 模块在目标环境中的可用性。
1. 安装完整依赖
yum install -y gcc make zlib-devel bzip2-devel libffi-devel
openssl-devel ncurses-devel sqlite-devel readline-devel
xz-devel tk-devel gdbm-devel perl tar wget
2. 编译 OpenSSL 1.1.1w
cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl-1.1.1 --openssldir=/opt/openssl-1.1.1 shared zlib
make -j$(nproc)
sudo make install
3. 编译 Python 3.10.11
INSTALL_PREFIX="/root/lee/python3.10.11/python3.10.11"
sudo mkdir -p "$INSTALL_PREFIX"
cd /tmp
wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz
tar -xzf Python-3.10.11.tgz
cd Python-3.10.11
./configure
--prefix="$INSTALL_PREFIX"
--with-openssl=/opt/openssl-1.1.1
--with-openssl-rpath=auto
--enable-optimizations
--disable-shared
make -j$(nproc)
sudo make altinstall
4. 安装 patchelf 0.13.1
cd /tmp
wget https://github.com/NixOS/patchelf/releases/download/0.13.1/patchelf-0.13.1.tar.gz
tar -xzf patchelf-0.13.1.tar.gz
cd patchelf-0.13.1
./configure --prefix=/usr/local
make && sudo make install
5. 将 OpenSSL 库复制到 Python lib 目录
cp /opt/openssl-1.1.1/lib/libssl.so.1.1 "$INSTALL_PREFIX/lib/"
cp /opt/openssl-1.1.1/lib/libcrypto.so.1.1 "$INSTALL_PREFIX/lib/"
6. 修改 _ssl.so 和 _hashlib.so 的 RPATH
SSL_SO=$(find "$INSTALL_PREFIX" -name "_ssl.so")
HASHLIB_SO=$(find "$INSTALL_PREFIX" -name "_hashlib.so")
patchelf --set-rpath '$ORIGIN/../../' "$SSL_SO"
patchelf --set-rpath '$ORIGIN/../../' "$HASHLIB_SO"
7. 验证
ldd "$SSL_SO"
ldd "$HASHLIB_SO"
8. 测试
"$INSTALL_PREFIX/bin/python3.10" -c "import ssl, hashlib; print('OK')"
9. 环境移植使用
将/root/lee/python3.10.11/python3.10.11打包,复制到其他机器,即可实现复用
浙公网安备 33010602011771号