编写setup.py
时,我可以指定extras_require
并提供我的工具的其他功能所需的依赖项列表,如下所示:
setup(
name = "mypackage",
install_requires = ["numpy"],
extras_require = {
"plotting": ["matplotlib"],
}
)
我将我的软件包上传到PyPI和conda频道并尝试安装它,包括所有额外内容。从PyPI我可以使用:
安装附加功能$ pip install mypackage[plotting]
但是,从conda安装我的软件包时,我无法安装附加组件。 conda有类似的选择吗?
答案 0 :(得分:4)
截至2017年4月18日,目前尚未实现这一目标。请参阅https://github.com/conda/conda/issues/3299和https://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