【发布时间】:2021-12-10 15:14:45
【问题描述】:
我目前正在开发一个软件包,但对 setuptools 感到困惑。这个包包含很多依赖,有了这些依赖,可以通过cli执行多个脚本。
例如
> 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,那么 CLI 中只有 main_pkg 可用。 (因此,如果执行pip install main_pkg[dep1],那么CLI中就会有main_pkg和main_pkg_which_needs_dep1可用)
但是,执行 pip install main_pkg 也会使所有其他 console_scripts 通过 CLI 可用,如果执行失败,例如main_pkg_which_needs_dep1 由于缺少依赖项。
setuptools 是否会出现这种行为?
来自documentation 我正在阅读以下内容:
由安装程序决定如何处理未指示 PDF 的情况(例如,省略控制台脚本、在尝试加载入口点时提供警告、假设存在附加组件并稍后让实施失败)。
此外,如果查看 here,文档中会提到以下内容:
在这种情况下,hello-world 脚本只有在指定了 pretty-printer extra 时才有效,因此如果未安装相关的额外依赖项,插件主机可能会排除该入口点(即不安装控制台脚本) .
我是否正确理解文档,安装程序(插件主机?--> pip?)必须处理这种情况,目前无法正常工作?
或者我是否必须进一步修改setup.py 才能实现这样的行为?
提前致谢!
【问题讨论】:
标签: python setuptools