在setup.py中声明我的包的可选组件

时间:2017-02-26 01:52:41

标签: python setuptools distutils

我整理了一个具有以下结构的库:

filters/
  __init__.py

  core/
    __init__.py
    base.py
    complex.py
    number.py
    string.py

  extra/
    __init__.py
    django.py
    iso.py
当开发人员执行filters.core时,应始终安装

pip install filters

但是,我希望filters.extra是可选的。它默认不会安装;相反,开发人员需要执行pip install filters[extra]之类的操作才能安装额外的软件包以及核心。

是否可以使用setuptools执行此操作?

1 个答案:

答案 0 :(得分:3)

使用默认的setuptools方法无法做到这一点。您可以选择两个选项:

  1. 使用额外的内容创建第二个项目,例如filters-extra。这是许多项目所做的。看,例如在flask on pypi
  2. 使用setuptools的"optional features"机制。这将始终安装您的代码,但只有在明确请求时才会安装附加功能的依赖项。
  3. 如果附加内容与您的核心功能真正分离,并且代码中没有互连,我通常会选择选项1,因为它更直接使用和记录。