在跨平台环境中管理conda env

时间:2019-09-19 11:13:52

标签: build export cross-platform conda environment

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

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

1。 conda env导出> env.yml
conda env创建--name -f env.yml

2。 conda env导出--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-它没有解释如何创建应构造环境的yml文件。

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

1 个答案:

答案 0 :(得分:1)

Conda Envs并非固有地跨平台

对不起,但是您要的不是什么。 Conda可以将环境的程序包信息序列化为YAML(非常可再现),但是不能保证它将是跨平台的。实际上,许多软件包,尤其是使用非Python代码的软件包,需要使用不同的基础构建工具作为依赖项,因此您所要求的将永远无法满足。

仅明确规范

最近几天,您可以得到的限制是限制environment.yaml仅包含使用--from-history标志创建环境所使用的明确规范。该功能刚刚发布,因此您需要Conda 4.7.12或更高版本。

conda env export --from-history > environment.yaml

这将生成一个YAML,该YAML仅包含环境历史记录中明确请求的软件包,例如,如果您的历史记录...

conda create -n foo python=3.7 numpy
conda install -n foo pandas scikit-learn

然后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

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


我仍然看到一吨包裹吗?!

我注意到,如果您曾经在环境中使用--update-deps标志,则会将每个依赖项添加为明确的规范。这是很不幸的。如果是这种情况,我建议您使用合法的规范重新创建环境,并在以后避免使用该标志。通过your command history搜索可能会在编译该合法规格列表时很有用。