如何制作可在隔离系统Python3.9虚拟环境运行的项目压缩包?
规范的离线Python项目打包方案(适配隔离系统)
针对制作可部署到Python 3.9隔离系统的离线压缩包需求,以下是几种更规范的实现方式,替代之前的临时方案:
方法1:使用pip download预编译依赖包(推荐)
无需在GitLab Runner中激活虚拟环境,直接针对目标系统的Python版本和架构下载完整的预编译依赖(包含.so文件):
- 在Pipeline中确保使用与隔离系统一致的Python 3.9环境
- 执行命令将所有依赖下载到指定目录:
(pip download -r requirements.txt --dest ./deps --python-version 39 --platform manylinux_x86_64 --only-binary=:all:--platform需根据隔离系统架构调整,如win_amd64或macosx_10_9_x86_64;--only-binary=:all:强制下载预编译wheel包,避免源码编译) - 打包项目代码、
requirements.txt和deps目录:zip -r project_offline.zip ./src ./requirements.txt ./deps - 隔离系统部署流程:
激活目标虚拟环境后,执行本地依赖安装:
优势:依赖包完全匹配目标环境,无缺失文件风险,流程清晰可追溯。pip install -r requirements.txt --no-index --find-links=./deps
方法2:用pip-tools锁定依赖版本并批量下载
适合对依赖版本有严格管控的场景,确保离线环境与开发环境依赖完全一致:
- 在Runner中安装
pip-tools:pip install pip-tools - 从
requirements.in(仅声明直接依赖)生成精确的锁定文件requirements.txt(包含所有间接依赖及版本):pip-compile requirements.in - 下载锁定的依赖到本地目录:
pip download -r requirements.txt --dest ./deps --python-version 39 --platform manylinux_x86_64 - 打包部署流程同方法1。
优势:彻底避免跨环境的版本冲突,符合生产环境的依赖管控规范。
方法3:打包完整可移植虚拟环境
如果隔离系统允许直接使用预创建的虚拟环境,可在Runner中构建适配目标系统的venv,打包后直接运行:
- 在Runner中创建Python 3.9虚拟环境:
python3.9 -m venv ./project_venv - 激活venv并安装所有依赖:
source ./project_venv/bin/activate pip install -r requirements.txt deactivate - 打包虚拟环境与项目代码:
zip -r project_venv.zip ./project_venv ./src - 隔离系统部署:
解压后直接激活venv即可运行,无需额外安装依赖:
注意:必须保证Runner的操作系统与隔离系统完全一致(如均为CentOS 7),否则虚拟环境会出现兼容性问题。unzip project_venv.zip source ./project_venv/bin/activate python ./src/main.py
核心注意事项
- 务必保证Runner的Python版本、操作系统架构与隔离系统完全匹配,否则预编译的.so文件无法正常加载。
- 纯Python依赖可省略
--platform参数,但带C扩展的依赖必须指定对应平台。 - 如果隔离系统未预创建虚拟环境,可在压缩包中包含虚拟环境创建脚本,或指导用户创建后执行本地依赖安装。
内容的提问来源于stack exchange,提问作者Dino Cherian
相关产品推荐
相关产品推荐

