在跨平台环境中管理 conda env

ram*_*mbo 2 environment cross-platform export build conda

我的项目应该在跨平台环境(Mac、Win、Linux)上运行。我创建了一个 conda env 来管理我们的依赖项以便于设置。我想确保每个想要更新 enn 的人都可以这样做,但是当我尝试将 env 从 linux 导出到 yml 文件时,它无法在 Win 或 Mac 上正确安装,反之亦然。

我已经尝试过做常规的事情:

1. conda env export > env.yml conda
env create --name -f env.yml

2. conda env export --no-builds > env.yml

3. https://medium.com/@Amet13/building-a-cross-platform-python-installer-using-conda-constructor-f91b70d393

4. https://tech.zegami.com/conda-constructor-tutorial-make-your-python-code-easy-to-install-cross-platform-f0c1f3096ae4

5. https://github.com/ESSS/conda-devenv/blob/master/README.rst

以上都没有给我正确的答案......我附上的一些教程可能会有所帮助,但我没有成功地正确实施它们,并且它们没有包含一些正确完成教程的重要信息。

例如:关于 3/4 - 它没有解释如何创建应该构造 env 的 yml 文件。

我知道 conda 应该在跨平台环境上工作......如果有人能帮助我,那就太好了。

mer*_*erv 5

Conda Envs 本质上不是跨平台的

对不起,但你所要求的根本不是一回事。Conda 可以将环境的包信息序列化为 YAML(非常便于重现),但不能保证它是跨平台的。事实上,很多包,尤其是那些没有 Python 代码的包,需要不同的底层构建工具作为依赖,所以你所要求的永远不会得到满足。

仅明确规格

这些天你能得到的最接近的是限制你environment.yaml只包含使用--from-history标志创建环境的显式规范。此功能需要 Conda v4.7.12 或更高版本。

conda env export --from-history > environment.yaml
Run Code Online (Sandbox Code Playgroud)

这将生成一个 YAML,其中仅包含在 env 的历史记录中明确请求的包,例如,如果您的历史记录...

conda create -n foo python=3.7 numpy
conda install -n foo pandas scikit-learn
Run Code Online (Sandbox Code Playgroud)

那么结果conda env export -n foo --from-history将是这样的

name: foo
channels:
  - defaults
dependencies:
  - python=3.7
  - numpy
  - pandas
  - scikit-learn
prefix: /your/conda/dir/envs/foo
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以省去所有其他可能特定于平台的依赖项。


我还在看到大量的包裹?!

我注意到,如果有人--update-deps在 env 中使用过该标志,它会将所有依赖项添加为显式规范。这是比较不幸的。如果是这种情况,我建议您使用您的合法规范重新创建 env,并在将来避免使用该标志。搜索您的命令历史记录可能有助于编译该合法规范列表。