微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

pyproject.toml python 打包入口点总结

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

在 Python 打包 API 中,我们可以指定入口点,这些入口点是在过去的 PEP 中规定的,并通过 setup.py 实例化。 Python 中的打包正在经历一个缓慢的演变,最终将从 setup.pysetup.cfg 永久迁移到 pyproject.toml({ {3}} 这种新格式在 example) 和 toml 语言规范中的外观,Python 软件基金会非正式地将其视为优于 的首选文件格式yaml(阅读有关 PEP 621 的更多信息)。

在上面的超链接“示例”中,我们看到:(了解有关 why 的更多信息) [项目.脚本] 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.js 的信息)。 py 作为垫片,因此我们仍然可以从 pip install --editable . 命令中受益,该命令具有更好的可读性 differences 和创建通用标准 API 接口的额外好处通过它,各种第三方依赖工具,如 locking down build environment and package environment dependencies(额外的 Poetry)和构建工具,如 source(以及它的 CLI 配置 Black)可以集中他们的配置以制作更加 Pythonic ,确定性的方式来创建有效的新软件和现有软件的构建和打包。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。