【问题标题】:Managing conda env in cross platform environment [duplicate]在跨平台环境中管理 conda env [重复]
【发布时间】:2019-09-19 11:13:52
【问题描述】:

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

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

1。 conda env 导出 > 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 应该在跨平台环境中工作...... 如果有人可以帮助我,那就太好了。

【问题讨论】:

  • “无法在 Win 或 Mac 上正确安装”是什么意思,是不是某些依赖项在 Windows 上不可用?
  • 那些库在 Win 或 Mac 上可能没有安装包......但我不在乎......我希望当我生成 yml 文件时它会自动放置包在 mac 的 win 上安装...现在我正在手动进行,我认为应该有更好的方法。另外,有些包确实有win或者mac上的安装版本,但是conda管理不善。
  • 我不认为将环境导出到 yml 应该以这种方式工作,它旨在导出并重新创建一个精确的环境。此外,在三个平台上拥有“相同”的环境会变得非常混乱,但它们实际上并不相同。
  • 我也尝试使用 conda-devenv 为每个平台生成不同的 yml,但效果不佳。 anaconda 的原则之一是易于安装在跨平台环境中,但我认为它不会发生
  • 这能回答你的问题吗? How to share conda environments across platforms

标签: build export cross-platform conda environment


【解决方案1】:

Conda Envs 不是天生的跨平台

抱歉,您所要求的根本不是一件事。 Conda 可以将环境的包信息序列化为 YAML(非常适合可重复性),但不能保证它是跨平台的。事实上,许多包,尤其是非 Python 代码的包,需要不同的底层构建工具作为依赖项,所以你的要求永远不会得到满足。

仅显式规范

这些天您能得到的最接近的方法是将您的environment.yaml 限制为仅包含使用--from-history 标志创建您的环境的明确规范。此功能需要 Conda v4.7.12 或更高版本。

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

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

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

通过这种方式,您可以忽略所有其他可能被证明是特定于平台的依赖项。


我仍然看到大量的包裹?!

我注意到,如果有人在 env 中使用 --update-deps 标志,它会将每个依赖项添加为显式规范。这是相当不幸的。如果是这种情况,我建议使用您的合法规范重新创建环境,并在将来避免使用该标志。搜索your command history 可能有助于编译该合法规范列表。

【讨论】:

  • --from-history 似乎已被弃用,不再有效。
  • @rjurney 你在哪里看到的?我在代码库或问题中没有看到任何证据。
  • 它只发生在不可用的 OS X 上,尽管使用了相同的 conda 环境。这种方法的问题是,如果不止一个人添加一个库,或者您从另一台机器添加它,那么它会从 tank 文件中丢失。
  • @rjurney 请提交an issue on the repository,并确保包括他们要求的文档(例如,来自环境的conda list 输出与问题)。如果你标记我 (@mfansler) 我会看看。
  • @merv 是的,但它不包括软件包版本,这就是我正在寻找的。具有包版本的--from-history 功能。
猜你喜欢
  • 2017-07-27
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多