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

Declaring optional components of my package in setup.py

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

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] 之类的操作才能将额外的软件包与核心一起安装。

是否可以使用设置工具执行此操作?

不,使用默认的设置工具是不可能的。您可以从两个选项中进行选择:

  1. 用额外的东西创建第二个项目,例如filters-extra。这是许多项目所做的。看例如在 flask on pypi.
  2. 使用 setuptools 的 "optional features" 机制。这将始终安装您的代码,但只有在明确要求时才会安装附加功能的依赖项。

如果额外功能确实与您的核心功能分离并且在代码中也没有相互关联,我通常会选择选项 1,因为它更易于使用和记录。