无网络无Pip环境下迁移Python2.7指定依赖包至生产VM的方案咨询
无网环境下Python2.7依赖迁移解决方案
1. 精准定位脚本所需依赖
先在开发VM上锁定脚本必须的依赖,避免打包无关包:
- 开发机有网,先装
pipreqs:pip install pipreqs,进到脚本所在目录执行:
会生成pipreqs --encoding=utf8 .requirements.txt,里面全是脚本直接依赖的包及对应版本。要是没pipreqs,就手动运行脚本,把报错缺失的包逐个加到requirements.txt里,直到脚本正常运行,确保这个文件只保留必要依赖。
2. 下载所有依赖到指定目录
把requirements.txt里的包(包括间接依赖)统一下载到单独目录:
pip download -d /your/local/package_dir -r requirements.txt
如果pip版本较老,改用:
pip install --download /your/local/package_dir -r requirements.txt
这一步会自动把所有需要的包(wheel或源码格式)拉到指定目录,不用手动去PyPI逐个找。
3. 打包迁移到生产VM
把依赖目录打包:
tar -czf python_deps.tar.gz /your/local/package_dir
用scp传到生产VM的目标目录:
scp python_deps.tar.gz your_user@production_vm:/dest/on/production
在生产VM上解压:
tar -xzf python_deps.tar.gz -C /dest/on/production
4. 离线安装(不升级已有包)
生产VM没pip的话,先解决pip问题,或者直接用源码安装:
- 推荐先装pip:在开发机下载Python2.7兼容的pip安装包(比如
pip-20.3.4.tar.gz),传到生产VM解压后执行python setup.py install完成pip安装。然后用pip离线安装依赖:pip install --no-index --find-links=/dest/on/production/package_dir --no-upgrade -r requirements.txt--no-index禁止pip从PyPI拉取包,--find-links指定本地包目录,--no-upgrade确保不会修改生产机已预装的包。 - 不用pip的情况:逐个处理包。wheel包先装wheel模块(传wheel源码包到生产机执行
python setup.py install),再用python -m wheel install --no-upgrade xxx.whl安装;源码包解压后进入目录执行:
注意按依赖顺序安装,先装被其他包依赖的基础包,再装上层依赖。python setup.py install --no-upgrade
关键注意事项
- 开发VM和生产VM的操作系统、架构要一致(比如都是64位CentOS),否则wheel包可能不兼容。怕麻烦就强制下载源码包:
pip download --no-binary :all: -d /your/local/package_dir -r requirements.txt - 安装时必须加
--no-upgrade参数,绝对不能改动生产机上已有的预装包。 - 最好在开发机创建干净的Python2.7虚拟环境,安装
requirements.txt里的包并测试脚本运行,确认无依赖遗漏后再打包迁移,能大幅降低出错概率。
内容的提问来源于stack exchange,提问作者uds0128
相关产品推荐
相关产品推荐

