如何将Ubuntu上的Python virtualenv完整迁移至无网络目标机器?
迁移Python虚拟环境到无网Ubuntu机器的可行方案
Got it,这种离线迁移虚拟环境的需求我碰到过好多次了,给你整理两个最靠谱的亲测方案,你可以根据自己的场景选择:
方案一:直接打包现有虚拟环境(最简快速版)
适合虚拟环境体积不大、目标机器和开发机系统架构/版本一致的情况:
- 先在开发机上退出虚拟环境:
deactivate - 把整个虚拟环境文件夹打包成压缩包,假设你的环境名叫
my_project_env:tar -czvf my_project_env.tar.gz my_project_env/ - 将压缩包、项目代码一起拷贝到U盘
- 在目标机器上,把压缩包解压到你想要的目录(比如
~/projects/):tar -xzvf my_project_env.tar.gz -C ~/projects/ - 激活迁移后的环境:
source ~/projects/my_project_env/bin/activate
注意:如果环境里包含编译过的二进制依赖(比如numpy、pandas这类),目标机器的Ubuntu版本、CPU架构必须和开发机一致,否则可能出现运行报错。如果遇到兼容性问题,建议切换到方案二。
方案二:离线下载依赖包,重建环境(稳妥兼容版)
适合跨系统版本/架构,或者担心直接打包出现问题的场景:
开发机操作步骤:
- 激活你的虚拟环境:
source my_project_env/bin/activate - 导出当前环境的依赖列表:
pip freeze > requirements.txt - 创建一个文件夹存储所有离线包:
mkdir offline_packages - 下载所有依赖到该文件夹(会优先下载wheel格式的预编译包,减少目标机器编译需求):
pip download -r requirements.txt -d offline_packages/- 如果项目中有从Git或其他非PyPI源安装的包,记得把这些包的源码/安装文件一并拷贝,或者在
requirements.txt中修改为本地路径
- 如果项目中有从Git或其他非PyPI源安装的包,记得把这些包的源码/安装文件一并拷贝,或者在
- 将
requirements.txt、offline_packages文件夹、项目代码全部拷贝到U盘
目标机器操作步骤:
- 如果目标机器还没安装
virtualenv,先通过离线包安装(提前在开发机用pip download virtualenv -d offline_packages/把它也下载好):python -m pip install --no-index --find-links=offline_packages virtualenv - 创建新的虚拟环境:
virtualenv my_new_env - 激活新环境:
source my_new_env/bin/activate - 安装离线依赖:
pip install --no-index --find-links=offline_packages/ -r requirements.txt - 把项目代码拷贝到目标机器的合适路径,即可正常运行
额外注意事项
- 尽量保证开发机和目标机器的Python大版本一致(比如都是3.8.x),避免版本不兼容问题
- 对于需要编译的C扩展包(如
psycopg2、scipy),最好在与目标机器系统匹配的环境中下载离线包,或者优先使用wheel包 - 别忘了拷贝项目的配置文件、静态资源等非代码文件
内容的提问来源于stack exchange,提问作者ChangSun An
相关产品推荐
相关产品推荐

