如何将安装在一台机器上的Anaconda环境转移到另一台机器上?[两台机器都安装了Ubuntu]

21
我一直在使用安装在Vmware的GuestOS ubuntu 14.04上的Anaconda(4.3.23),HostOS是windows 8.1。我在anaconda中设置了一个环境并安装了许多库,其中一些库的安装很复杂(不直接pip安装)。有些库有内部依赖关系,必须一起构建并从它们的git源中下载。
问题:我要使用云端VM(Azure GPU实例)来使用GPU。但我不想再次进行繁琐的安装,因为我不想浪费时间和金钱去重新安装所有的软件包和库。
是否有任何方法可以将我的现有环境(已经安装了所有内容)转移/复制到云VM上?

你应该能够执行 conda list --export > requirements.txt,然后在新环境中执行 conda create --name [env name] --file requirements.txt - o-90
这只在包和库是直接从 pip 安装并且没有特别配置的情况下才适用吧?按照您的方法,我会得到包的名称列表,在新环境下这些包将再次从 pip 安装。但问题是我有一些自定义构建的包,它们彼此之间有依赖配置。 - Qaisar Rajput
你可能可以通过 conda export 安装依赖项和 pip 包。但是,如果你所说的 "繁琐安装" 指的是其他软件包(例如 apt install)的安装,我认为 conda export 可能无法帮助你。因为你正在尝试在不同的操作系统之间进行迁移。 - jayaneetha
6个回答

8

这个文档页面的最后一部分开始:

保存软件包以备将来使用:

conda list --export > package-list.txt

从导出文件中重新安装软件包:

conda create -n myenv --file package-list.txt

3
这只有在软件包和库是现成的并且需要从pip安装时才有效,对吧?按照您的方法,我将拥有软件包名称列表。在新环境中,这些软件包将再次从pip安装。但问题是,我有自定义构建的软件包,它们具有相互依赖的配置。 - Qaisar Rajput
1
重新安装的话,需要使用 "conda env create -n myenv --file package-list.txt" 命令。顺便说一下,链接已经失效了。 - HasnainMamdani

6
## You can try below approach to move all the package from one machine to other :
## Note : Machine that packages are being moved should be same and python version also should be same



$ pip install conda-pack



# To package an environment:

## Pack environment my_env into my_env.tar.gz

$ conda pack -n my_env

## Pack environment my_env into out_name.tar.gz

$ conda pack -n my_env -o out_name.tar.gz


## Pack environment located at an explicit path into my_env.tar.gz

$ conda pack -p /explicit/path/to/my_env


# After following above approach, you will end up with a tar.gz file. Now to install package from this zip file follow below approach.

## To install the environment:

## Unpack environment into directory `my_env`

$ mkdir -p my_env
$ tar -xzf my_env.tar.gz -C my_env


## Use Python without activating or fixing the prefixes. Most Python
## libraries will work fine, but things that require prefix cleanups
## will fail.

$ ./my_env/bin/python


## Activate the environment. This adds `my_env/bin` to your path

$ source my_env/bin/activate


## Run Python from in the environment

(my_env) $ python


## Cleanup prefixes from in the active environment.
## Note that this command can also be run without activating the environment
## as long as some version of Python is already installed on the machine.

(my_env) $ conda-unpack

这种方法非常适合将环境复制到没有或有限的互联网连接的机器上。DS.SE上的这个答案对这种方法有更多详细信息。 - iled

3

如果conda list --export出现以下错误...

执行conda list --export > package-list.txt会创建一个文件,类似于以下内容:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
_tflow_1100_select=0.0.1=gpu
absl-py=0.5.0=py_0
astor=0.7.1=py_0
...

但是通过执行 conda create -n myenv --file package-list.txt 创建新环境时,我收到了以下错误提示:
Solving environment: ...working... failed

PackagesNotFoundError: The following packages are not available from current channels:

  - markdown==2.6.11=py_0
  ...

...然后尝试使用conda env export

根据此讨论,在您的源计算机上执行以下命令:

source activate yourEnvironment
conda env export --no-builds > file.txt

在目标机器上执行:
conda env create --file /path/to/file.txt
< p >通过使用conda env export 生成的文件看起来有点不同,但是它 也包含pip软件包:
name: yourEnvironment
channels:
  - conda-forge
  - defaults
dependencies:
  - absl-py=0.5.0
  ...
  - pip:
    - astroid==2.0.4
    ...

1
感谢您提供详细的答案,但我认为这并不能解决问题。如果软件包和库是现成的,并且可以从pip中安装,那么这种方法才有效吧?按照您的方法,我将获得软件包的名称/版本列表。在新环境中,这些软件包将再次从pip中安装。但问题是,我有自定义构建的软件包,它们具有相互依赖的配置。 - Qaisar Rajput

1

您可以将整个Anaconda安装程序复制到云实例中,这样可能会更加方便。


你不会遇到为特定内核编译的库的问题吗?算了,两者都使用Ubuntu,所以应该没问题。这可能是你最好的选择,@Qaisar Rajput - Glubbdrubb
正确的方法可能是通过yml文件导出环境。 - Rohit Lal

1
根据 Github 线程,在源机器上执行以下命令: https://github.com/conda/conda/issues/3847
source activate yourEnvironment
conda env export --no-builds > environment.yml

在目标机器上执行以下操作:

conda env create -f environment.yml

由conda env export生成的文件看起来有些不同,但它也包含pip包:
名称: yourEnvironment 渠道:
- conda-forge - 默认值
依赖项:
- absl-py=0.5.0 ... - pip: - astroid==2.0.4 ...

1
目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0

我从this找到了答案。

你可以使用以下命令导出你的Anaconda环境:

conda env export > environment.yml

为了在另一台机器上重新创建它,请使用:

conda env create -f environment.yml

您可以根据需要修改environment.yml,因为一些Python库可能已经过时或由于未来版本冲突而需要更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接