conda 虚拟环境直接拷贝到新机器上能用吗?
处理思路
最近被21v背刺, 需要备份已经部署好的代码。
然后涉及到虚拟机迁移的问题,就是直接复制能用么?可以简单地回答:不能直接“打包整个 /home/azureuser 就万事大吉”。
原因:
1. Conda 除了装在 ~/miniconda3(或 anaconda3)里的文件外,还会往 ~/.conda
、~/.condarc
、PATH、shell 初始化脚本写一些配置;
2. 如果环境里装过 pip 包,其中某些 C 扩展在编译时可能硬编码了绝对路径或系统库版本,换内核/glibc 版本后可能不兼容;
3. 你可能在系统里额外装过 apt 的依赖(libssl-dev、libffi-dev 等),这些不会随 home 目录一起迁走。
因此推荐 “半自动迁移” 而不是整目录拷贝。
迁移步骤(最稳妥)
1. 在新机器上先装同版本 Miniconda/Anaconda
# 新机器
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 重新打开 shell
2. 在旧机器导出环境列表
# 旧机器
conda activate base
conda list --explicit > base-spec.txt
# 如果你有其他命名环境
conda env export -n myenv > myenv.yml
3. 复制代码 & 少量大文件
# 旧机器
rsync -avP --exclude='*.pyc' --exclude='__pycache__' \
--exclude='miniconda3' --exclude='.conda' \
/home/azureuser/ newhost:/home/azureuser/
4. 新机器重建环境
# base 环境
conda install --yes --file base-spec.txt
# 命名环境
conda env create -f myenv.yml
5. 检查 pip-only 的包
有时 conda env export
会漏掉 pip:
部分,可在旧机器:
pip freeze > requirements.txt
到新机器激活对应环境后:
pip install -r requirements.txt
如果非要“整目录拷贝”想偷懒
- 两台机器 必须是同架构、同 OS 版本、同 glibc;
- 复制后把
~/miniconda3
整个目录搬走,然后执行
bash source ~/miniconda3/etc/profile.d/conda.sh conda init bash # 或 zsh
让 shell 重新注册 conda; - 最后跑
conda list
/python -c "import numpy"
逐个验证。
出问题概率:~30%,一旦出现 segmentation fault 或 “version `GLIBC_2.xx’ not found” 就只能回到上面的“半自动迁移”。
一句话总结:
用 conda env export
+ rsync 代码
是最省心、最不容易踩坑的方案。