我目前正在开发一个包,并对 setuptools 感到困惑。该包包含许多依赖项,有了这些依赖项,可以通过 cli 执行多个脚本。
E.G.
> main_pkg
> main_pkg_which_needs_dep1
> main_pkg_which_needs_dep2
> ...
系统上没有必要让所有脚本都可用。只有相关的。所以我想我可以简单地修改我的setup.py
如下:
...
entry_points=dict(console_scripts=[
'main_pkg = main_pkg.main_pkg:main ',
'main_pkg_which_needs_dep1 = main_pkg.main_pkg:main_dep1 [dep1]',
...
]),
...
extras_require={
"dep1": ["psycopg"],
"dep2": ["apsw"],
"dep3": ["numpy"],
...
},
并假设如果有人执行pip install main_pkg
, 只有main_pkg
将在 CLI 中可用。 (因此,如果执行pip install main_pkg[dep1]
,那么就会有main_pkg
and main_pkg_which_needs_dep1
在 CLI 中可用)
然而,执行pip install main_pkg
也使得所有其他console_scripts
通过 CLI 可用,如果执行例如失败main_pkg_which_needs_dep1
由于缺少依赖项。
setuptools 是否期望这种行为?
来自文档 https://setuptools.pypa.io/en/latest/userguide/dependency_management.html?highlight=extras_require#optional-dependencies我正在阅读以下内容:
由安装程序决定如何处理未指示 PDF 的情况(例如,省略控制台脚本、在尝试加载入口点时提供警告、假设存在额外内容并让实现稍后失败)。
另外,如果看here https://setuptools.pypa.io/en/latest/userguide/entry_point.html?highlight=console_scripts#dependency-management,文档提到以下内容:
在这种情况下,hello-world 脚本仅在指示了 Pretty-printer extra 时才可行,因此如果未安装相关的额外依赖项,插件主机可能会排除该入口点(即不安装控制台脚本)。
我是否正确理解文档,安装程序(插件主机?--> pip?)必须处理这种情况,目前无法正常工作?
还是我必须进一步修改setup.py
实现这样的行为?
提前致谢!