前言
为了成功地将Python环境从一台机器迁移至另一台机器,应确保目标系统与源系统具有兼容的操作系统版本,并满足环境中所有包和依赖的二进制兼容性要求。迁移过程中,目标机器上必须预装Anaconda或Miniconda,因为这将为恢复和管理迁移的Python环境提供必要的安装基础和工具。
可通过多种方法来打包或复制环境,
- 使用conda-pack打包整个conda环境
- 通过pip freeze > requirements.txt来导出pip环境中的包并在目标系统中重新安装
- 使用environment.yml文件来定义conda环境并通过该环境定义创建新的环境(网上有说有用的,我没用过)
提示:以下是本篇文章正文内容,下面案例可供参考
一、打包环境
- conda-pack打包
使用conda-pack工具打包整个conda环境,可以按照以下步骤进行操作:
① 在源系统上运行以下命令:conda install conda-pack
,以确保conda-pack工具已安装。
② 在源系统上运行命令:conda pack -n <environment_name> -o <output_filename>.tar.gz,
其中<environment_name>是您要打包的环境名称,<output_filename>是打包结果的输出文件名。
③ 将生成的tar.gz文件传输到目标系统中。 - 如果选择使用pip来管理包依赖,可以按照以下步骤进行操作:
①利用pip将服务运行所依赖的包下载到本地,拷贝到目标服务器进行离线安装:pip list --format=freeze > requirements.txt
此处不使用pip freeze命令是因为pip freeze导出的文件会出现@ file://的问题,导致后续下载依赖包的时候出现问题。
②下载依赖包到指定目录pip download -r requirements.txt -d "/home/admin/packs" -i https://pypi.tuna.tsinghua.edu.cn/simple
③将生成的packs依赖包和 requirements.txt传输到目标系统中。 - 如果选择使用environment.yml文件来定义conda环境并创建新的环境,可以按照以下步骤进行操作:
①在源系统上运行命令:conda env export --name <environment_name> > environment.yml,导出当前环境的配置信息到一个YAML文件中。
②将生成的environment.yml文件传输到目标系统中。
③在目标系统的命令行中,运行命令:conda env create -f environment.yml,根据YAML文件创建新的conda环境。
二、安装ananconda
- 下载Anaconda的安装包
在官网上查找自己需要的版本:https://repo.anaconda.com/archive/ - 进行安装包安装
bash Anaconda3-2022.10-Linux-x86_64.sh
此时显示的是Anaconda的信息,并且会出现More,继续按Enter(一直按住Enter就行)按照提示进行enter键入或yes输入,一路完成安装,
选择安装目录,可选择默认或自定义
此处将安装目录修改为
[/root/anaconda3] >>> /home/anaconda3 - 对环境变量进行修改
命令:vi ~/.bashrc
- 进行验证
命令:(base) [root@dap07 anaconda3]# conda env list
出现base,则表示anaconda安装成功,或者输入conda -V
会出现已安装好anaconda的版本号 - conda 常用的命令
退出虚拟环境:conda deactivate
删除虚拟环境:conda remove -n xxx --all
拷贝已有的虚拟环境:conda create -n new_env --clone base_env
三、解压并安装虚拟环境
(假设我已经新建了一个test 虚拟环境)
- 如果选择使用使用conda-pack工具打包虚拟环境,可以按照以下步骤进行虚拟环境迁移:
①将打包好的压缩包,解压到,test虚拟环境路径下:tar -zxvf pytorch_py39.tar.gz -C /homet/anaconda3/envs/test/
②解压完成,激活新的环境conda activate test
(如果这步报错,执行③)
③source activate
再执行source deactivate
再执行conda activate test
- 如果选择使用pip来管理包依赖,可以按照以下步骤进行虚拟环境迁移:
①切换到test虚拟环境下conda activate test
②pip install -U --no-index --find-links=./packs -r requirements.txt
若出现Cannot uninstall 'xxxx'. It is a distutils installed project and thus we cannot accurately det...(xxx是某package的名称),使用如下命令进行解决:
③ pip install -U --ignore-installed --no-index --find-links=./packs xxx
- 如果选择使用environment.yml文件,可以安装以下步骤进行虚拟环境迁移
①conda env create -f environment.yml
四、遇到的一些问题
- 问题使用conda create -n 虚拟环境名字 --offline 创建环境后,发现envs的环境目录下只有conda-meta,
解决方案:首先建议先把这个环境删除,conda remove -n 虚拟环境名字 --all
,然后重新创建环境,创建时候,带上python的版本,如果不知道该带什么python版本可以先输入python,看一看anaconda默认带的环境是什么。然后重新创建新虚拟环境。
conda create -n test --offline python=3.8 #test为创建的虚拟环境名称
- 如果虚拟环境中,默认的环境是python=3.10,但是想要换一个python=3.9的版本怎么办?(网上的答案,没试过。)
解决方案:下载对应版本的安装包:https://www.python.org/downloads/ 然后拷贝到断网环境
tar -xzvf Python.tgz
cd Python
./configure --prefix= myenv虚拟环境的绝对地址)
make&make install
默认装完的Python3调用起来要用python3, pip3,很难受,加个软链接
ln -s myenv/bin/python3 myenv/bin/python
ln -s myenv/bin/pip3 myenv/bin/pip
总结
记录一下将互联网上的环境迁移到内网上的过程,方便日后查看使用,写的不好欢迎各位大佬批评指正。这次的记录是假设迁移的环境和目标操作系统一致,如果不一致,还要考虑操作系统的问题。例如从windows 操作系统迁移到linux,这里建议在windows下安装一个相似的操作系统,可以用wsl或者vmware,下次再出一个笔记,记录,如何再win11上装一个ubantu 。