本地conda环境迁移到目标服务器上
适用问题:
因为服务器上不能联网,所以我需要先将环境在本地下好并上传到服务器上。
方法:
禁用用户级别的 site-packages
确保新环境不会加载用户级的包,可以在激活环境后强制禁用用户级 site-packages。方法有两种:
设置环境变量
export PYTHONNOUSERSITE=1
检查 site-packages 路径,在激活环境后执行下面命令,防止 Python 搜索用户目录中的 package:
python -c "import sys; print(sys.path)"
确保输出不包含用户级路径
常规安装环境
conda create -n new_env python=3.8
conda activate new_env
pip install .
这样,所有依赖(包括那些项目依赖中指定的包)都会安装到 new_env 的 site-packages 下,而不会去加载用户目录里的包。
强制重新安装可能存在问题的包(可选)
有时即使上面的设置已经生效,依然可能存在某些包因之前用户级别安装而“残留”。可以使用下面命令确保例如packages被安装在环境里:
pip install --force-reinstall packages
打包与部署流程
按照上述步骤创建并整理好环境后,继续使用 conda-pack 打包、在目标机器解压部署:
打包:
安装 conda-pack(如果环境中还没有的话)
conda install -c conda-forge conda-pack
打包环境
conda pack -n new_env -o new_env.tar.gz
部署:
cd /opt/new_env
./bin/conda-unpack
/opt/new_env/bin/python your_script.py
坑
打包后迁移到服务器上一直提示会缺一些包,原因是在本地新建环境中的一部分包不在这个新建的环境里,比如新环境中的包可能来自以下两个地址:
/home/user/.local/lib/python3.8/site-packages/typing_extensions.py
/home/user/miniconda3/envs/env_janus_pro/lib/python3.8/site-packages/torch/init.py
而打包时来自第一个地址的包不会被打包,因此再服务器上会提示缺少一些包,使用以上步骤可以解决这个问题。

浙公网安备 33010602011771号