在 Conda environment.yaml 中设置 channel_priority

Jon*_*jer 8 python environment conda

是否有可能设置channel_prioritystrict使用YAML文件创建一个环境的时候?例如:

name: my_environment
channels:
  - conda-forge
dependencies:
  - python
  - geopandas
  - rasterio
Run Code Online (Sandbox Code Playgroud)

Pie*_*e D 18

另一项注意事项是给定包的指定频道不需要在该channels部分中列出。我发现这更安全,因为它不会冒从意外渠道(重新)安装某些其他软件包的风险。

因此,例如:

channels:
  - defaults

dependencies:
  - python =3.8
  - ...
  # specifically from conda-forge (but only those):
  - conda-forge::nbsphinx
Run Code Online (Sandbox Code Playgroud)

代替:

# NO!
channels:
  - defaults
  - conda-forge

dependencies:
  - python =3.8
  - ...
  - conda-forge::nbsphinx
Run Code Online (Sandbox Code Playgroud)

重要的是,这似乎只安装来自 的指定软件包conda-forge,并且它不会尝试(重新)安装conda-forge这些软件包的依赖关系图中但已经可用的软件包版本(可能是稍微不太前沿的版本) ) 从pkgs/main

  • 话虽这么说,我真的很喜欢你的建议,因为它可以防止像 https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610 这样的恐怖故事。(考虑一下“defaults”是由一家知名公司运营的,而“conda-forge”甚至不提供任何负责人的联系方式。更糟糕的是,数百人似乎可以访问“conda-forge”存储库。 ) (2认同)

Jon*_*jer 6

感谢merv
一种解决方法是为每个包指定通道:

name: my_environment
channels:
  - conda-forge
dependencies:
  - conda-forge::python
  - conda-forge::geopandas
  - conda-forge::rasterio
Run Code Online (Sandbox Code Playgroud)

  • 如何为给定包指定本地频道。在通道下添加 file:// 路径有效,但当我为每个包指定它时则无效。conda 似乎在寻找 url (2认同)