具有以下封装结构
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
的内容setup.py
from setuptools import setup
setup()
的内容setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
my_package
我可以为此构建轮子或源代码分发
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
但是根据setuptools 的维护者的说法,声明式构建配置是理想的,使用命令式构建将是一种代码味道。所以我们替换setup.py
为pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
的内容pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
你仍然可以像以前一样建造一个轮子,它可以工作。但是 sdist 不起作用:
python: can't open file 'setup.py': [Errno 2] No such file or directory
那么您应该如何使用 setuptools实际构建 .tar.gz 文件?创建 sdist 的面向用户的工具是什么?我不想更改构建后端。看起来其他打包工具都编写了自己的构建入口点,但我认为在元数据中定义声明式构建系统的全部目的是让您不必亲自动手构建系统,学习每个需要调用不同的打包工具,或者必须进入解释器并手动调用 Python API。但是构建系统要求的 PEP 现在已经超过 2 年了。我在这里遗漏了一些明显的东西吗?
如何在不使用setup.py
文件的情况下构建源代码分发?