如何将 PEP 517 和 PEP 518 用于本地可用(不在 PYPI 上)系统范围的 CLI Python 脚本

Posted

技术标签:

【中文标题】如何将 PEP 517 和 PEP 518 用于本地可用(不在 PYPI 上)系统范围的 CLI Python 脚本【英文标题】:How to use PEP 517 and PEP 518 for locally available (not on PYPI), system-wide CLI Python scripts 【发布时间】:2021-03-05 01:17:57 【问题描述】:

我正在将我的工作扩展到 CLI 应用程序,以获得一些自动化和其他生活质量优势,并开始在这些项目中使用 setup.cfg 和 pyproject.toml 而不是通常的 requirements.txt 。问题是我真的希望这些应用程序暂时不要在 PyPi 上共享,而我正在使用基本机制和用例,但喜欢使用这些工具将 python 包连接到可执行文件是多么容易我的操作系统的路径。通常,我会使用 pipx 来帮助我解决这个问题并直接从源代码安装,但我很好奇您是否还有其他策略。

【问题讨论】:

【参考方案1】:

pyproject.toml python打包中的入口点总结

所以我终于弄清楚了这个野兽,并且知道如何初始化入口点脚本并使其易于作为可执行文件添加到系统的 PATH 中——基本上,我们可以使用 Python 打包约定/自动化来创建系统范围/用户范围可访问任何命令行实用程序。

在 Python 打包 API 中,我们可以指定 入口点,这些入口点是在过去的 PEP 中规定的,并通过 setup.py 实例化。 Python 中的打包正在经历缓慢的演变,最终将从 setup.pysetup.cfg 永久迁移到 pyproject.toml (@ 987654321@PEP 621) 和 toml 语言规范,这是 Python 软件基金会非正式认可的首选文件格式,而不是 yaml(阅读更多关于why的信息)。

在上面的超链接“示例”中,我们看到:(了解更多关于differences) [项目.脚本] spam-cli = "spam:main_cli"

[project.gui-scripts]
spam-gui = "spam:main_gui"

[project.entry-points."spam.magical"]
tomatoes = "spam:main_tomatoes"

这些替换了 setup() 对象中的以下选项 entry_points

# source: https://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/creation.html#entry-points

setup(name='zest.releaser',
      ...
      entry_points=
          'console_scripts':
              ['release = zest.releaser.release:main',
               'prerelease = zest.releaser.prerelease:main',
               ]
      )

其中令人兴奋的部分是我们可能会(最终)将整个打包问题减少到仅 pyproject.toml 文件(我们还没有,请参阅有关使用 setup.xml 的信息)。 py 作为 shim,因此我们仍然可以从 pip install --editable . 命令中受益,该命令具有更好的可读性,locking down build environment and package environment dependencies,并创建了一个通用标准 API 接口,通过该接口各种第三方依赖工具,如Poetry(额外的source)和构建工具,如Black(以及它的CLI 配置options)可以集中它们的配置,以创建一种更加pythonic、确定性的方式来创建有效的构建和打包新的和现有的软件。

【讨论】:

以上是关于如何将 PEP 517 和 PEP 518 用于本地可用(不在 PYPI 上)系统范围的 CLI Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法为使用 PEP 517 且无法直接安装的 Kivy 构建***

错误:无法为使用 PEP 517 且无法直接安装的 scipy 构建***

错误安装 streamlit 它说“错误:无法为使用 PEP 517 且无法直接安装的 pyarrow 构建***”

(Python:discord.py)错误:无法为使用 PEP 517 且无法直接安装的 multidict、yarl 构建***

解决报错Could not build wheels for numpy which use PEP 517 and cannot be installed directly

解决报错Could not build wheels for numpy which use PEP 517 and cannot be installed directly