即使未安装可选依赖项,Python setuptools 也会安装控制台脚本

2023-12-25

我目前正在开发一个包,并对 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实现这样的行为?

提前致谢!


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

然而,这个评论:https://github.com/pypa/pip/issues/9726#issuecomment-826381705 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 安装,因此不会提供入口点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使未安装可选依赖项,Python setuptools 也会安装控制台脚本 的相关文章

  • 使用请求验证 SSL 证书

    我正在尝试验证 SSL 但它不起作用 我在浏览器上访问了我想要访问的机密网站 在 Chrome 上 我单击了储物柜 gt 证书 gt 详细信息 gt 复制到文件 gt base64 gt cert cer 我的代码是 test reques
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • Python - 用逗号分割,跳过括号内的内容

    我需要用逗号分隔字符串 但我对这种情况有一个问题 TEXT EXAMPLE THIS IS A EXAMPLE BUT NOT WORKS FOR ME SECOND THIRD 我想拆分并得到 var 0 TEXT EXAMPLE THI
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 将一个列表的元素除以另一个列表的元素

    我有两个清单 比如说 a 10 20 30 40 50 60 b 30 70 110 正如你所看到的 列表 b 由一个列表的元素总和组成 其中 window 2 b 0 a 0 a 1 10 20 30 etc 如何获得另一个列表 该列表由
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 如何通过字符串匹配加速 pandas 行过滤?

    我经常需要过滤 pandas 数据框df by df df col name string value 并且我想加快行选择操作 有没有快速的方法可以做到这一点 例如 In 1 df mul df 3000 2000 3 reset inde
  • TypeError:无法使用抽象方法实例化抽象类 <...>

    这是我的代码 from abc import ABC from abc import abstractmethod class Mamifiero ABC docstring for Mamifiero def init self self
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐