如何跨平台共享 conda 环境
How to share conda environments across platforms
http://conda.pydata.org/docs/using/envs.html 的 conda 文档解释了如何与其他人共享环境。
但是,文档告诉我们这不是跨平台的:
NOTE: These explicit spec files are not usually cross platform, and
therefore have a comment at the top such as # platform: osx-64 showing the
platform where they were created. This platform is the one where this spec
file is known to work. On other platforms, the packages specified might not
be available or dependencies might be missing for some of the key packages
already in the spec.
NOTE: Conda does not check architecture or dependencies when installing
from an explicit specification file. To ensure the packages work correctly,
be sure that the file was created from a working environment and that it is
used on the same architecture, operating system and platform, such as linux-
64 or osx-64.
有没有什么好的方法可以在一个平台(例如CentOS)到另一个平台(例如Windows)共享和重建conda环境?
给出此答案的前提是您希望确保
您通常关心的相同版本的软件包都在
不同的平台,你不关心完全相同的版本
所有 个包在整个依赖树中。如果您正在尝试安装
整个依赖关系树中所有包的完全相同的版本
失败的可能性很高,因为一些 conda 包有不同的
osx/win/linux 的依赖项。例如,食谱
otrobopt
将在 Win 与 osx/linux 上安装不同的包,因此环境列表
会不一样。
建议:手动创建environment.yaml
文件并指定或固定
只有您关心的依赖项。 让 conda 求解器完成剩下的工作。
可能值得注意的是 conda-env
(您用来管理 conda 的工具
环境)明确建议您 "始终创建您的
environment.yml
手动归档。"
那你就做conda env create --file environment.yml
查看自述文件
conda-env.
它们可以很简单:
name: basic_analysis
dependencies:
- numpy
- pandas
或更复杂,您可以固定依赖项并指定 anaconda.org 通道
安装自:
name: stats-web
channels:
- javascript
dependencies:
- python=3.4 # or 2.7 if you are feeling nostalgic
- bokeh=0.9.2
- numpy=1.9
- nodejs=0.10
- flask
- pip:
- Flask-Testing
无论哪种情况,您都可以使用 conda env create --file environment.yaml
创建环境。
注意:如果您使用的是旧版本的 conda,您可能需要使用 .*
作为版本后缀。
应该使用 conda-env export 将完整的环境导出到名为 my_env.yml.
的文件中
检查在 OS X 上仅获取前缀而不是包含 pip 的完整依赖项的工作解决方案。
第 1 步:如果已激活,请从环境中停用。否则它将创建只有前缀的 yml 文件。
第 2 步:运行 下面的导出命令
conda-env export -n my_env > my_env.yml
它会将所有需要的依赖项、通道和 pip 安装导出到一个 yml 文件中,该文件可导入以与他人共享。
第 3 步:运行 下面的命令导入
conda-env create -n my_env -f= my_env.yml
它将创建与共享伙伴计算机上完全相同的环境。
对于维护可在 Linux、macOS 和 Windows 中使用的单个环境文件的解决方案感兴趣的人,请查看 [=11] 上的 conda-devenv
工具=].
虽然可以手动创建 environment.yml
文件,但您可以使用 conda env export --from-history
标志确保您的环境跨平台工作。
这将只包括您明确要求的包,而不是包括您环境中的每个包。
例如,如果您创建一个环境并安装一个包 conda install python=3.8 numpy
,它将安装许多其他依赖项以及 python 和 numpy。
如果您随后 运行 conda env export > environment.yml
,您的 environment.yml
文件将包含 conda 自动为您安装的所有附加依赖项。
另一方面,运行ning conda env export --from-history
只会用 python=3.8
和 numpy
创建 environment.yml
,因此可以跨平台工作。
答案改编自 the docs。
其他答案中缺少的一个方面是提问者提到“规范文件”而不是“environment.yml”文件。这些是不同的。
规格文件
规范文件指定了确切的包 URL,并且是 used to recreate identical environments (on the same platform)。
看起来像这样:
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
@EXPLICIT
https://repo.anaconda.com/pkgs/free/osx-64/mkl-11.3.3-0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/numpy-1.11.1-py35_0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/openssl-1.0.2h-1.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/pip-8.1.2-py35_0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/python-3.5.2-0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/readline-6.2-2.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/setuptools-25.1.6-py35_0.tar.bz2
可以在感兴趣的conda环境中用conda list --explicit
获取。
要用它创建一个新环境,可以使用 conda create
命令:
conda create --name <env_name> --file <spec file path>
environment.yml
environment.yml文件描述的很好。
可以在感兴趣的conda环境下通过以下命令获取:
conda env export
获取当前环境下的所有包
conda env export --from-history
只获取显式安装的包(即不自动添加依赖项)
这个问题比较老了,conda也在这期间发展起来了。也许 spec 文件的原始含义等于 environment.yml 个文件,但为了完整起见,我添加了这个答案。
http://conda.pydata.org/docs/using/envs.html 的 conda 文档解释了如何与其他人共享环境。
但是,文档告诉我们这不是跨平台的:
NOTE: These explicit spec files are not usually cross platform, and
therefore have a comment at the top such as # platform: osx-64 showing the
platform where they were created. This platform is the one where this spec
file is known to work. On other platforms, the packages specified might not
be available or dependencies might be missing for some of the key packages
already in the spec.
NOTE: Conda does not check architecture or dependencies when installing
from an explicit specification file. To ensure the packages work correctly,
be sure that the file was created from a working environment and that it is
used on the same architecture, operating system and platform, such as linux-
64 or osx-64.
有没有什么好的方法可以在一个平台(例如CentOS)到另一个平台(例如Windows)共享和重建conda环境?
给出此答案的前提是您希望确保 您通常关心的相同版本的软件包都在 不同的平台,你不关心完全相同的版本 所有 个包在整个依赖树中。如果您正在尝试安装 整个依赖关系树中所有包的完全相同的版本 失败的可能性很高,因为一些 conda 包有不同的 osx/win/linux 的依赖项。例如,食谱 otrobopt 将在 Win 与 osx/linux 上安装不同的包,因此环境列表 会不一样。
建议:手动创建environment.yaml
文件并指定或固定
只有您关心的依赖项。 让 conda 求解器完成剩下的工作。
可能值得注意的是 conda-env
(您用来管理 conda 的工具
环境)明确建议您 "始终创建您的
environment.yml
手动归档。"
那你就做conda env create --file environment.yml
查看自述文件 conda-env.
它们可以很简单:
name: basic_analysis
dependencies:
- numpy
- pandas
或更复杂,您可以固定依赖项并指定 anaconda.org 通道 安装自:
name: stats-web
channels:
- javascript
dependencies:
- python=3.4 # or 2.7 if you are feeling nostalgic
- bokeh=0.9.2
- numpy=1.9
- nodejs=0.10
- flask
- pip:
- Flask-Testing
无论哪种情况,您都可以使用 conda env create --file environment.yaml
创建环境。
注意:如果您使用的是旧版本的 conda,您可能需要使用 .*
作为版本后缀。
应该使用 conda-env export 将完整的环境导出到名为 my_env.yml.
的文件中检查在 OS X 上仅获取前缀而不是包含 pip 的完整依赖项的工作解决方案。
第 1 步:如果已激活,请从环境中停用。否则它将创建只有前缀的 yml 文件。
第 2 步:运行 下面的导出命令
conda-env export -n my_env > my_env.yml
它会将所有需要的依赖项、通道和 pip 安装导出到一个 yml 文件中,该文件可导入以与他人共享。
第 3 步:运行 下面的命令导入
conda-env create -n my_env -f= my_env.yml
它将创建与共享伙伴计算机上完全相同的环境。
对于维护可在 Linux、macOS 和 Windows 中使用的单个环境文件的解决方案感兴趣的人,请查看 [=11] 上的 conda-devenv
工具=].
虽然可以手动创建 environment.yml
文件,但您可以使用 conda env export --from-history
标志确保您的环境跨平台工作。
这将只包括您明确要求的包,而不是包括您环境中的每个包。
例如,如果您创建一个环境并安装一个包 conda install python=3.8 numpy
,它将安装许多其他依赖项以及 python 和 numpy。
如果您随后 运行 conda env export > environment.yml
,您的 environment.yml
文件将包含 conda 自动为您安装的所有附加依赖项。
另一方面,运行ning conda env export --from-history
只会用 python=3.8
和 numpy
创建 environment.yml
,因此可以跨平台工作。
答案改编自 the docs。
其他答案中缺少的一个方面是提问者提到“规范文件”而不是“environment.yml”文件。这些是不同的。
规格文件
规范文件指定了确切的包 URL,并且是 used to recreate identical environments (on the same platform)。
看起来像这样:
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
@EXPLICIT
https://repo.anaconda.com/pkgs/free/osx-64/mkl-11.3.3-0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/numpy-1.11.1-py35_0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/openssl-1.0.2h-1.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/pip-8.1.2-py35_0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/python-3.5.2-0.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/readline-6.2-2.tar.bz2
https://repo.anaconda.com/pkgs/free/osx-64/setuptools-25.1.6-py35_0.tar.bz2
可以在感兴趣的conda环境中用conda list --explicit
获取。
要用它创建一个新环境,可以使用 conda create
命令:
conda create --name <env_name> --file <spec file path>
environment.yml
environment.yml文件描述的很好
可以在感兴趣的conda环境下通过以下命令获取:
conda env export
获取当前环境下的所有包conda env export --from-history
只获取显式安装的包(即不自动添加依赖项)
这个问题比较老了,conda也在这期间发展起来了。也许 spec 文件的原始含义等于 environment.yml 个文件,但为了完整起见,我添加了这个答案。