迁移python环境事项

迁移python环境事项

今天为了交付客户软件包,将python venv环境从ubuntu24的机器迁移到ubuntu22机器中,太费劲了。所以以后不要venv,要不用conda,要不用docker,建议docker最合适。

venv方案

使用venv方案,ubuntu22中python版本是3.10,而ubuntu24 python版本是3.12,由于不兼容,venv中包也一定程度也不兼容,导致了大量问题。

我是这样迁移的:

#机器1,ubuntu24:
pip freeze>requirements.txt
#然后在机器2,ubuntu22:
while read -r line; do
    echo "尝试安装: $line"
    pip3 install "$line" || echo "$line" >> temp_requirements.txt
done < requirements.txt

过程中会有安装失败的包,之后要手动安装

即便这些装好了,到了ubuntu22系统中,运行同一个整合包,会报错,module not found:

因为有些本地包用的相对路径。将所有错误一一解决后,总算可以运行了。

conda方案

直接导出所有包:

conda pack -n your_env_name -o your_env_name.tar.gz

或者:

conda env export -n your_env_name > environment.yml

docker 方案

在docker hub找到对应的镜像:

nvidia/cuda Tags | Docker Hub

然后启动镜像,(推荐用compose):

docker run -i -t -v /workspace/:/workspace:rw --gpus all --shm-size 64G nvidia/cuda:xxx /bin/bash

相关指令:

docker commit -m "迁移准备" my_container my_image:v1
docker save -o my_image.tar my_image:v1 #保存
docker load -i my_image.tar # 加载
  • 元数据丢失docker export 不会保留容器的元数据(如端口映射、环境变量等),因此在目标机器上需要手动重建这些配置。

  • 完整迁移:如果需要保留所有元数据和历史记录,建议使用 docker commitdocker save