使用 conda 安装附加功能

m00*_*0am 6 python anaconda conda

在编写 a 时,setup.py我可以指定extras_require并提供我的工具的附加功能所需的依赖项列表,如下所示:

setup(
    name = "mypackage",
    install_requires = ["numpy"],
    extras_require = {
        "plotting": ["matplotlib"],
    }
)
Run Code Online (Sandbox Code Playgroud)

我将我的包上传到 PyPI 和 conda 频道并尝试安装它,包括所有附加功能。从 PyPI,我可以使用以下方法安装附加功能:

$ pip install mypackage[plotting]
Run Code Online (Sandbox Code Playgroud)

但是,当从 conda 安装我的软件包时,我无法安装附加功能。conda 有类似的选项吗?

dar*_*ith 5

截至 2017 年 4 月 18 日,这目前是不可能的。请参阅https://github.com/conda/conda/issues/3299https://github.com/conda/conda/issues/2984

我通常使用的解决方案只是将所有可能可选的内容作为强制依赖项。这往往会奏效,因为 conda 包可用于大多数平台,特别是常见的依赖项,并且如果依赖项不可用,则编写 conda 配方并将其上传到 Anaconda.org 相对容易。


Uwe*_*orn 5

您可以通过为可选依赖项创建元包来实现此目的。一个很好的例子是matploptlib-feedstock。这里有matplotlib-base包含所有代码的主包和matplotlib依赖的元包matplotlib-base及其可选的 Qt 依赖项。

考虑到这个matplotlib例子,你可以在你的配方中有以下输出:

package:
  name: some_pkg

…usual recipe contents…

outputs:
  - name: some_pkg

  - name: some_pkg_with_optional_dep
    requirements:
      host:
        - python
      run:
        - python
        - optional_dependency
        - {{ pin_subpackage('some_pkg', exact=True) }}
    test:
      imports:
        - some_pkg
Run Code Online (Sandbox Code Playgroud)

请注意,当您需要特定版本的可选依赖项时,您可以在可选包中指定它,但只有在some_pkg_with_optional_dep安装后才会应用版本约束。

要独立于 的存在而遵守对可选依赖项的版本约束some_pkg_with_optional_dep,您应该在以下run_constrained部分中指定它:

requirements:
  …
  run_constraint:
    - optional_dependency >=1.2
Run Code Online (Sandbox Code Playgroud)