Anaconda完全离线环境迁移


问题:anaconda的离线环境迁移一直是一个问题,虽然论坛中给出了很多种所谓的离线迁移方法,但是这些方法存在有如下问题:

  1. 将anaconda整体复制:conda list会报错,或许还有一些潜在的错误。
  2. 使用pip导出requirements.txt,然后下载离线包。这个方法看似可行,但是用pip导出的包清单不仅包括pip的,还包括conda安装的,pip下载的过程中很多conda安装的包并不能找到。
    基于上诉问题,笔者提出了如下方法。
    在这里,首先假定A为能上网的需要迁移出环境的机器;B为不能上网的需要迁移入环境的机器。

1. 检查A机环境中的包是否存在不兼容现象

这一步十分关键,如果存在不兼容,B机无法安装!
用pip检查
命令:Pip check
具体问题具体分析,建议用conda装(对于依赖的检测安装功能更加强大)

2. 用conda导出依赖清单

为什么使用conda导出?因为现在版本的conda不仅可以导出conda安装的依赖,同时也可以导出pip安装的依赖,一举两得。
进入A机的anaconda环境,导出依赖清单:(一定要先conda list否则容易丢包)

conda list
conda env export > your_env.yaml

清单图如下,可以看到这里分别有conda依赖清单和pip依赖清单。

dependencies:
  - alabaster=0.7.12=py_0
  - astroid=2.4.2=py36h9f0ad1d_0
  - async_generator=1.10=py_0
  - attrs=20.2.0=pyh9f0ad1d_0
  - babel=2.8.0=py_0
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.6.1=py_0
  - bleach=3.2.1=pyh9f0ad1d_0
  - ca-certificates=2021.5.30=h5b45459_0
  - certifi=2021.5.30=py36ha15d459_0
  - chardet=3.0.4=py36h9f0ad1d_1007
  - colorama=0.4.3=py_0
  - cudnn=6.0=0
  - decorator=4.4.2=py_0
  - defusedxml=0.6.0=py_0
  - docutils=0.16=py36h9f0ad1d_1
  - entrypoints=0.3=py36h9f0ad1d_1001
  - webencodings=0.5.1=py_1
  - wheel=0.35.1=pyh9f0ad1d_0
  - widgetsnbextension=3.5.1=py36h9f0ad1d_1
  - wincertstore=0.2=py36_1003
  - winpty=0.4.3=4
  - wrapt=1.11.2=py36h68a101e_0
  - zeromq=4.3.2=h6538335_2
  - zipp=3.3.0=py_0
  - zlib=1.2.11=h2fa13f4_1004
  - pip:
    - absl-py==0.10.0
    - altgraph==0.17
    - argon2-cffi==20.1.0
    - astor==0.8.1
    - atomicwrites==1.4.0
    - autopep8==1.5.4
    - bcrypt==3.2.0
    - blessings==1.7
    - cachetools==4.1.1
    - cffi==1.14.3
    - cloudpickle==1.6.0
    - cryptography==3.4.7
    - cycler==0.10.0
    - dataclasses==0.8

3. 修改依赖清单列表

  1. 在A机上建立一个txt文件,命名为conda.yaml,其中复制入dependencies中的依赖名称(不包含dependencies)。并将“XXX -”替换为“”(XXX表示空格,替换为空),如果不修改,安装时报错。记事本编辑\替换可以完成这个操作。修改完成的清单如下:
alabaster=0.7.12=py_0
astroid=2.4.2=py36h9f0ad1d_0
async_generator=1.10=py_0
attrs=20.2.0=pyh9f0ad1d_0
babel=2.8.0=py_0
backcall=0.2.0=pyh9f0ad1d_0
backports=1.0=py_2
backports.functools_lru_cache=1.6.1=py_0
bleach=3.2.1=pyh9f0ad1d_0
ca-certificates=2020.6.20=hecda079_0
certifi=2020.6.20=py36h9f0ad1d_0
chardet=3.0.4=py36h9f0ad1d_1007
colorama=0.4.3=py_0
cudatoolkit=10.0.130=0
cudnn=7.6.0=cuda10.0_0
decorator=4.4.2=py_0
  1. 在A机上再建立一个txt文件,命名为pip.txt。在其中复制入pip:内的部分。按照1步中的方法,将“ -”替换为“”。修改后的依赖清单为:
absl-py==0.10.0
altgraph==0.17
argon2-cffi==20.1.0
astor==0.8.1
atomicwrites==1.4.0
autopep8==1.5.4
bcrypt==3.2.0
blessings==1.7
cachetools==4.1.1
cffi==1.14.3
cloudpickle==1.6.0
cryptography==3.4.7
cycler==0.10.0

注意:conda和pip对于依赖的命名是不同的!依赖清单可以加入自己其他的本地包名称。

4 获取依赖安装包

4.1 获取conda依赖安装包

进入A机anaconda安装根目录中的pkgs(注意不是环境中的),拷贝出所有的“.conda”,“.tar.bz2”文件到‘condafile’,上面的文件为这些包的解压文件。这些文件就是以前用conda安装时下载的安装包文件。

4.2 下载pip依赖安装包

在A机上利用pip根据pip.txt中的清单下载依赖包。这里我cd到了Desktop,-r表示依赖清单,-d表示存储依赖的路径。

pip download -r pip.txt -d pipfile

之后将这两部分的文件拷贝到另一个文件下,笔者命名为pipfile。
最终在A机上建立如下结构的文件:

--\transference
	--\condafile
	--\conda.yaml
	--\pipfile
	--\pip.txt

5 B机安装依赖

在B机上安装好anaconda之后,离线创建环境,并进入环境:

conda create -n csdntest --offline
conda activate csdntest

在这里插入图片描述

5.1 Conda依赖安装

将前面的transference拷贝到B机桌面上,cd到该路径下,按照conda.yaml从transference离线安装依赖。

  1. 将condafile里面的所有文件拷贝到anaconda安装根目录下的pkgs,重复的文件复制或替换,这个目录就是conda的安装的缓存目录。
  2. Cd 到conda.yaml 的目录下
Conda install --file conda.yaml --offline
  1. 安装过程中可能会报错,可能是由于安装了其他python版本的包,或者是其依赖库没有找到。具体问题具体分析,下载相对应的库。

可以看到conda的软件已经全部安装,当然包括python和pip,这样一下步就可以使用pip安装了。

5.2 Pip依赖安装

同样的操作:

  1. Cd 到pip.txt 的路径下
Pip install -r pip.txt --no-index --find-links=.  --user

导入第三方包,测试表明,环境顺利迁移!
在这里插入图片描述

小问题:

如果使用pip freeze > requirements.txt 命令导出已安装的模块,其中部分模块显示了 @ file:///…,而不是具体的版本号。
原因:
这是 pip 安装软件包的一种特殊语法(自19.1开始受支持)PEP404,但是该此种路径取决于环境,file:///URL 仅在本地文件系统上可用,你不能将生成的 requirements.txt 文件提供给其他人使用
解决:
当你遇到此类问题时,可以暂时考虑使用如下命令生成 requirements.txt 文件

pip list --format=freeze > requirements.txt

使用上述命令导出的文件中,会包含如下几个包:distribute,pip,setuptools,wheel,建议手动删除!
————————————————
该部分为CSDN博主「zzzzls~」的原创文章,遵循CC 4.0 BY-SA版权协议,原文链接:https://blog.csdn.net/qq_36078992/article/details/109435000

搞了劳资一天!!!

  • 13
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值