24

次のパッケージ構造で

.
├── 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ファイルを使わずにソース配布をビルドするには?

4

3 に答える 3