Anaconda环境离线迁移_CondaPackError处理

在使用Python进行程序开发时,避免不了使用各类的Python包,以最大限度地通过复用模块来减少我们手动编写的代码量,使我们能够更加专注于主体业务逻辑相关的核心代码。谈到Python包的管理以及Python版本的管理,Anaconda是截至目前使用最广泛、最便捷的工具软件之一。特别是在对已有的Python库进行离线迁移的时候,使用Anaconda所带来的便捷性极大地降低了Python环境迁移的时间和人力成本,基本上可以做到使用很简单的若干行命令即可。这里的离线迁移是相对于使用pip freeze的方式导出环境中包的列表,再通过pip install命令通过联网进行安装的方式而言的,即是说将Python环境从一台机器导出,并在另一台没有互联网环境的机器上进行部署的方法。

一般而言,采用Anaconda进行环境离线迁移主要通过如下几步:

第一步,使用如下命令创建Python环境

conda create -n env_name python=python_version

其中env_name为环境名称,python_version为Python版本号,如3.6。

第二步,通过pip install命令,安装所需要配置的Python包。

第三步,使用如下命令激活新创建的Python环境

conda activate env_name

第三步,使用如下命令,安装conda-forge和conda-pack工具

conda install -c conda-forge conda-pack

第四步,使用conda pack工具导出当前环境为离线环境

conda pack -n env_name

该过程还可以指定Python环境打包后导出的压缩包名称,只需添加-o参数,例如将上述环境导出为env_name.tar.gz压缩包

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

第五步,将env_name.tar.gz压缩包拷贝至相同版本的Anaconda安装路径的envs路径下进行解压,并通过命令行激活该环境即可完成迁移。

正常情况下采用上述方法可以实现环境的导出及迁移,但当在第二步安装所需要的包的时候,由于其他包的需要,可能会更新由Anaconda安装的包,主要是pip、setuptools、wheel等几个包,导致在使用conda pack进行环境导出时出现_CondaPackError错误,具体如下

_CondaPackError:
Files managed by conda were found to have been deleted/overwritten in the
following packages:

- pip='9.0.1'

This is usually due to pip uninstalling or clobbering conda managed files,
resulting in an inconsistent environment. Please check your environment for
conda/pip conflicts using conda list, and fix the environment by ensuring
only one version of each package is installed (conda preferred).

这个大意是说pip安装的包的版本与conda安装的包的版本冲突了,需要进行统一。笔者尝试了使用pip uninstall将pip卸载的方式,以及采用conda install重新安装pip的方式进行处理,但都导致通过pip list和conda list列出来的包的版本信息出现混乱的问题。在网上进行搜索得到的各路方案,尝试后也没有得到良好的解决。

从上述报错中可知,环境不能导出主要在于pip和conda安装的包的版本出现了冲突,导致不得不对二者进行统一化处理。既然这样,那么将所有的包的安装,统一安装源就OK了。想到这一层,那么解决方案也就显而易见了,无非就是以下两点:

第二点是显而易见的,也是易于操作和实现的。而对于第一点,需要采用如下两步处理方式:

第一步,创建环境时综合考虑初始包的版本,保证满足当前待导出环境中其他包的依赖需求,并在创建环境时设定好版本,例如

conda create -n env_name python=3.6 pip=21.0.1

这样保证了版本兼容性之后,在采用pip安装环境所需要的后续包的时候就不会产生卸载重装已有包更新版本的问题了。

第二步,在迁移后,可能之后还会有新的包补充安装,并面临环境的再次迁移。因此,需注意以下几点:

在安装新的包的时候,注意检查其依赖的包,如果有的依赖包在当前环境中已经安装,则需进一步检查其当初是采用pip安装的还是初始时conda安装的,如果是前者,则可直接采用pip install的命令安装新的包,如果是后者,则需要使用conda install先将依赖包按照所需要的版本安装,然后再使用pip install安装新的包,这样便保证了包版本在pip和conda两边的一致性,进而保证再次导出时不会报上述的错误。

Original: https://blog.csdn.net/maximejia/article/details/115385868
Author: maximejia
Title: Anaconda环境离线迁移_CondaPackError处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/771736/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球