如何跨平台共享conda环境

use*_*622 50 python cross-platform conda

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.
Run Code Online (Sandbox Code Playgroud)

是否有一种很好的方法可以在另一个平台(例如Windows)中的一个平台(例如CentOS)中共享和重新创建conda环境?

小智 67

回答

这个答案是假设您希望确保您通常关心的软件包的相同版本位于不同平台上,并且您不关心整个依赖关系树中所有软件包的完全相同版本 .如果您尝试在整个依赖关系树中安装完全相同版本的所有软件包,那么很可能会失败,因为一些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
Run Code Online (Sandbox Code Playgroud)

或者更复杂,您可以在哪里固定依赖项并指定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
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,您都可以创建一个环境 conda env create --file environment.yaml

如果您有更复杂的用例或更多问题,请更新原始问题,我会看看是否可以为您提供更多帮助.

  • 请参阅 @Adam Murphy 的答案,了解一个不尝试复制整个环境的手动选项:`conda env export --from-history`。 (3认同)
  • Conda 最好考虑 JavaScript 方法,即具有“一阶”依赖项的“package.json”和用于所有子依赖项的“package-lock.json”/“yarn.lock”。 (2认同)

Ada*_*phy 23

虽然可以environment.yml手动创建文件,但您可以使用该conda env export --from-history标志确保您的环境跨平台工作。

这将只包括您明确要求的包,而不是包括您环境中的每个包。

例如,如果您创建一个环境并安装一个包conda install python=3.8 numpy,它将安装许多其他依赖项以及 python 和 numpy。

如果您然后运行conda env export > environment.yml,您的environment.yml文件将包含为您自动安装的所有附加依赖项 conda。

在另一方面,运行conda env export --from-history只会创建environment.ymlpython=3.8numpy,因此将跨平台工作。

改编自docs 的答案。

  • 根据我的经验,这通常不能跨平台工作。 (3认同)

Iru*_*abs 5

conda-env export 应用于将完整环境导出到名为 my_env.yml 的文件。

检查在 OS X 上仅获取前缀而不是包括 pip 的完整依赖项的工作解决方案。

第 1 步:如果已激活,则从环境中停用。否则它将创建仅带有前缀的 yml 文件。

第2步:运行以下命令进行导出

conda-env export -n my_env > my_env.yml
Run Code Online (Sandbox Code Playgroud)

它将把所有必需的依赖项、通道和 pip 安装导出到 yml 文件中,该文件可导入以与其他人共享。

第3步:运行以下命令进行导入

conda-env create -n my_env -f= my_env.yml
Run Code Online (Sandbox Code Playgroud)

它将创建与共享机器上完全相同的环境。


All*_*lan 5

对于那些对维护可在 Linux、macOS 和 Windows 中使用的单个环境文件的解决方案感兴趣的人,请查看https://github.com/ESSS/conda-devenvconda-devenv上的工具。