【问题标题】:Python setuptools installs console scripts even if optional dependency are not installed即使未安装可选依赖项,Python setuptools 也会安装控制台脚本
【发布时间】: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_pkgmain_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


    【解决方案1】:

    我遇到了同样的问题。基于此线程:https://github.com/pypa/pip/issues/9726,您似乎无法选择安装控制台脚本。

    但是,这条评论:https://github.com/pypa/pip/issues/9726#issuecomment-826381705 提出了一个可能对您有所帮助的解决方案。我会在下面复制粘贴。

    myscript 带有额外的 [cli] 依赖于 myscript-cli 包,而 myscript-cli 依赖于 myscript 但包含主包中 console_script 的入口点。

    如果您安装 myscript[cli],它需要 myscript-cli 包,然后安装该包并包含您想要的入口点。这使得 myscript[cli] 或 myscript-cli 安装两个包,但允许安装不需要 -cli 包的 myscript 安装,因此不会提供入口点。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2013-08-30
      • 2016-05-27
      • 2019-04-21
      • 2014-06-28
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多