unc*_*yon 19 python setup.py pyproject.toml
阅读 pyproject.toml、python -m pip install、诗歌、flit 等 - 我有几个关于用 pyproject.toml 替换 setup.py 的问题。
我最大的问题是 - toml 文件如何替换 setup.py。这意味着,toml 文件无法完成 py 文件可以做的所有事情。仔细阅读,poetry 和 flit 完全用 pyproject.toml 替换了 setup.py。虽然 pip 使用 pyproject.toml 来指定构建工具,但仍然使用 setup.py 来执行其他操作。
一个很好的例子是,pip 目前无法直接在 toml 文件中为控制台脚本创建入口点,但 Poetry 和 flit 可以。
我现在的主要问题是;
pyproject.toml 的目的是提供构建系统要求。它是一个元数据文件。因此,理想的解决方案不是仅使用此文件来指定构建系统要求,而仍然利用 setup.py 来处理其他所有事情。
我很困惑,因为我觉得我们为了解决一个相当简单的问题而失去了很多。通过完全使用 setup.py 并将其替换为 pyproject.toml,我们失去了许多可以在 setup.py 中执行的有用操作。我们不能使用 a __version.py__,并且我们失去了自动创建万能轮和 sdist 以及使用 Twine 将包上传到 PyPi 的能力。我们目前可以在 setup.py 文件中执行此操作。
我只是花了一些时间思考为什么我们想要用仅元数据文件完全替换 setup.py 。似乎将它们一起使用是两全其美的。我们解决了先有鸡还是先有蛋的构建系统问题,并且我们保留了 setup.py 可以做的许多有用的事情。
无论如何,我们不需要 setup.py 来在开发模式下安装吗?或者也许这只是一个点问题?
cas*_*bre 13
目前我也在研究这个功能。我找到了 setuptools 的这个实验性功能解释,它应该只是引用,pyproject.toml而不需要setup.py最后。
关于dynamic的行为setup.py,我发现您可以为[project]元数据下的字段设置动态行为
dynamic = ["version"]
[tool.setuptools.dynamic]
version = {attr = "my_package.__version__"}
Run Code Online (Sandbox Code Playgroud)
其中设置了本例中的相应版本,例如my_package.__init__.py
__version__ = "0.1.0"
__all__ = ["__version__"]
Run Code Online (Sandbox Code Playgroud)
最后,我猜想 setuptools 将覆盖缺失的setup.py执行并为开发模式放置必要的 Egg 链接。
Pip 不会将 setup.py 用于其他所有事情。
setuptools 本身不鼓励使用 setup.py 并转换为 setup.cfg (或 pyproject.toml)。
许可证、摘要、名称、作者电子邮件、版本...所有这些都可以在没有 setup.py 的情况下使用 pip,并且轮子也是由 pip 创建的。
亲自了解 pip 可以对文件执行哪些操作pyproject.toml:
https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/
您可以使用密钥指定入口点entry-points,如 @casabre 的链接所示:
https ://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
Toml 不仅仅是一个简单的requirements.txt. 您可以设置复杂的指令,例如:
tool.setuptools.packages = {find = {where = ["src"], exclude=["tests*"]}}
并__version__.py成为文件中的一个简单条目pyproject.toml,甚至是动态的,如 @casabre 所说:
[project]
version = "0.1.0"
Run Code Online (Sandbox Code Playgroud)
使用 twine 上传到 PyPi 也应该按照以下链接工作: https ://setuptools.pypa.io/en/latest/userguide/quickstart.html#uploading-your-package-to-pypi
要在开发模式下安装,您可以在您的pyproject.toml:
[project.optional-dependencies]
dev = ["flake8", "pytest"]
Run Code Online (Sandbox Code Playgroud)
然后pip install .[dev]在您的项目文件夹中。
| 归档时间: |
|
| 查看次数: |
12738 次 |
| 最近记录: |