使用conda安装附加组件

时间:2017-04-13 10:15:39

标签: python anaconda conda

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

setup(
    name = "mypackage",
    install_requires = ["numpy"],
    extras_require = {
        "plotting": ["matplotlib"],
    }
)

我将我的软件包上传到PyPI和conda频道并尝试安装它,包括所有额外内容。从PyPI我可以使用:

安装附加功能
$ pip install mypackage[plotting]

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

2 个答案:

答案 0 :(得分:4)

截至2017年4月18日,目前尚未实现这一目标。请参阅https://github.com/conda/conda/issues/3299https://github.com/conda/conda/issues/2984

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

答案 1 :(得分:2)

您可以通过为可选依赖项创建一个metapackage来做到这一点。 matploptlib-feedstock是一个很好的例子。在这里,您具有包含所有代码的主软件包matplotlib-base和依赖于matplotlib及其可选Qt依赖项的元软件包matplotlib-base

请牢记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

请注意,当需要特定版本的可选依赖项时,可以在可选包中指定它,但是版本约束仅在安装了some_pkg_with_optional_dep时适用。

要独立于some_pkg_with_optional_dep的存在而对可选依赖项进行版本约束,应在run_constrained部分中指定它:

requirements:
  …
  run_constraint:
    - optional_dependency >=1.2