【问题标题】:conda install different packages from different channels in one lineconda 在一行中安装来自不同渠道的不同软件包
【发布时间】:2022-01-07 02:37:40
【问题描述】:

使用conda install时,是否可以在一行中安装不同渠道的不同包?例如,有人可以这样做某事吗?

conda install -c <channel_1> <package_1> -c <channel_2> <package_2> ...?

【问题讨论】:

  • 这将是一个不错的选择,以便自动安装保存在 .csv 文件中的 conda 包列表,其中每个包我都有有关频道的信息。然后我可以解析 .csv 文件并创建一行代码,自动从正确的渠道安装所有包。
  • @9769953 "run conda install ... 多次" - 在这种策略下,求解器很可能最终将以前安装的软件包重新采购到其他渠道。此外,Conda 计算量最大的部分是求解,尽管一开始就知道整个规范,但这会浪费地重新求解环境的子集。

标签: python anaconda conda


【解决方案1】:

--channel 参数

--channel, -c 标志告诉 Conda 在哪里搜索包,但不一定限制特定包的来源。此外,指定通道的顺序适用于整个求解过程,与相邻的封装规范没有上下文关系。例如以下命令解析后完全相同:

conda install -c A -c B pkg1 pkg2
conda install -c A pkg1 -c B pkg2
conda install -c A pkg2 -c B pkg1
conda install pkg1 pkg2 -c A -c B

所有这些都将优先于 B 频道 A(在 channel_priority: strictflexible 下)。

需要强调的是,这并不能保证会使用这些渠道中的任何一个,只考虑。我认为对上述命令进行平淡无奇的翻译会有所帮助:

优先考虑通道 AB,确保在当前环境中安装包 pkg1pkg2 p>

为每个包指定频道

不过,the MatchSpec grammar 的表现力很强,完全支持指定从哪个渠道获取给定包。例如,如果我们想要来自频道 Apkg1 和来自频道 Bpkg2,这将表示为:

conda install A::pkg1 B::pkg2

转化为祈使句:

确保在当前环境中安装了来自通道 Apkg1 和来自通道 Bpkg2

请注意,我们甚至不需要通过 --channel 参数包含通道,因为包规范本身就指示了通道。如果他们想从附加通道获取附加包(例如,pkg1 的依赖项),则只需包含 --channel, -c 参数。

【讨论】:

    【解决方案2】:

    FWIW,如果您在 YAML 文件中指定所有内容,则可以免费获取 使用正确的语法并从中更新。更多信息请见here/here

    我本机尝试将相同的语法放入单行中,它似乎可以满足您的需求:

    $ conda install "conda-forge::black" "main::click" -c conda-forge -c main
    Collecting package metadata (current_repodata.json): done
    Solving environment: done
    
    ## Package Plan ##
    
      environment location: /Users/mwt/miniconda3
    
      added / updated specs:
        - conda-forge::black
        - main::click
    
    
    The following packages will be downloaded:
    
        package                    |            build
        ---------------------------|-----------------
        click-8.0.3                |     pyhd3eb1b0_0          73 KB  main
        mypy_extensions-0.4.3      |   py37hf985489_4          10 KB  conda-forge
        typed-ast-1.5.1            |   py37h271585c_0         207 KB  conda-forge
        ------------------------------------------------------------
                                               Total:         290 KB
    
    The following NEW packages will be INSTALLED:
    
      black              conda-forge/noarch::black-21.12b0-pyhd8ed1ab_0
      click              main/noarch::click-8.0.3-pyhd3eb1b0_0
      dataclasses        conda-forge/noarch::dataclasses-0.8-pyhc8e2a94_3
      mypy_extensions    conda-forge/osx-64::mypy_extensions-0.4.3-py37hf985489_4
      pathspec           conda-forge/noarch::pathspec-0.9.0-pyhd8ed1ab_0
      platformdirs       conda-forge/noarch::platformdirs-2.3.0-pyhd8ed1ab_0
      tomli              conda-forge/noarch::tomli-1.2.2-pyhd8ed1ab_0
      typed-ast          conda-forge/osx-64::typed-ast-1.5.1-py37h271585c_0
      typing_extensions  conda-forge/noarch::typing_extensions-4.0.1-pyha770c72_0
    
    The following packages will be UPDATED:
    
      certifi            pkgs/main::certifi-2021.10.8-py37hecd~ --> conda-forge::certifi-2021.10.8-py37hf985489_1
    
    The following packages will be SUPERSEDED by a higher-priority channel:
    
      ca-certificates    pkgs/main::ca-certificates-2021.10.26~ --> conda-forge::ca-certificates-2021.10.8-h033912b_0
      conda              pkgs/main::conda-4.11.0-py37hecd8cb5_0 --> conda-forge::conda-4.11.0-py37hf985489_0
      openssl              pkgs/main::openssl-1.1.1l-h9ed2024_0 --> conda-forge::openssl-1.1.1l-h0d85af4_0
    
    
    Proceed ([y]/n)?
    

    【讨论】:

    • 非常好!你能举一个例子来说明如果你想从一个渠道安装多个包,这条线会是什么样子吗?我猜像conda install "conda-forge::black" "conda-forge::white" "main::click" "main::me"-c conda-forge -c main
    • 如果您想从一个频道安装多个软件包,但从另一个频道安装一个/很少,我认为修改频道优先级会更容易,即conda install black isort flake8 numpy matplotlib "main::other_package" -c conda-forge -c main。这可能需要设置严格的通道优先级。不过,我在这里的 0.02 美元是为了尝试使用 YAML 文件,因为它更明确地跟踪状态。
    • 尽管添加了我自己的答案,但我完全赞同这里更广泛的建议,即考虑使用 YAML。这是一种更加深思熟虑和系统化的方式来处理环境,并且您可以对其进行版本控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多