Dengan struktur paket berikut
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Isi dari setup.py
from setuptools import setup
setup()
Isi dari setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Saya dapat membuat roda atau sumber distribusi untuk my_package
seperti ini
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
Tetapi menurut pengelola setuptools , konfigurasi build deklaratif adalah ideal dan menggunakan build imperatif akan menjadi kode bau. Jadi kami ganti setup.py
dengan pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Isi dari pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Dan Anda masih bisa membangun roda dengan cara yang sama seperti sebelumnya, itu berhasil. Tapi sdist tidak berfungsi:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Jadi bagaimana Anda seharusnya membangun file .tar.gz menggunakan setuptools ? Apa alat yang dihadapi pengguna untuk membuat sdist? Saya tidak ingin mengubah backend build. Sepertinya alat pengemasan lainnya semuanya menulis titik masuk build mereka sendiri, tetapi saya pikir inti dari mendefinisikan sistem build deklaratif dalam metadata adalah agar Anda tidak perlu terlibat langsung dengan sistem build, mempelajari bagaimana masing-masing alat pengemasan yang berbeda diharapkan dipanggil atau harus masuk ke juru bahasa dan memanggil API Python secara manual. Tetapi PEP untuk persyaratan sistem bangunan sudah berusia lebih dari 2 tahun sekarang. Apakah saya melewatkan sesuatu yang jelas di sini?
Bagaimana cara membangun distribusi sumber tanpa menggunakan setup.py
file?
sumber
pep517.build
yang hanya dimaksudkan sebagai percobaan, penopang sementara ketika ada alat produktif seperti flit, puisi, palka, dan mungkin bahkan lebih?pep517.build
adalah alat sederhana yang dibuat untuk tujuan ini.pep517.build
salah satunya. Tapi tidak sama sekali, itu sebenarnya front-end build. Juga menetas tidak siap PEP517 seperti yang saya lihat sekarang.Tidak ada yang "jelas" ketika datang ke kemasan Python. Memang, untuk saat ini, setidaknya jika Anda menggunakan distutils / setuptools perlu untuk membuat
setup.py
file kosong (hampir) , bahkan jika Anda menggunakan deklaratif sepenuhnyasetup.cfg
:Saya juga merekomendasikan
chmod +x setup.py
.Dalam hal ini Anda hanya menulis "titik masuk" ke sistem build sendiri, dan
setup()
hanyamain()
fungsi untuk itu - tetapi sekarang semua argumen yang secara tradisional diteruskansetup()
dapat dibaca darisetup.cfg
gantinya.Sekarang Anda masih bisa menggunakan
setup.py sdist
jika Anda ingin membuat tarball sumber:./setup.py sdist
Anda juga dapat mencoba salah satu sistem build alternatif yang diaktifkan via
pyproject.toml
, seperti Flit .sumber
setup.cfg
berarti bahwasetup.py
tidak perlu lagi menggunakan setuptools, yang tidak benar. Hanya karena judul pertanyaan itu menyesatkan, bukan berarti jawabannya. Mereka menulis di badan pertanyaan, "Jadi bagaimana Anda seharusnya membangun file .tar.gz menggunakan setuptools ?" yang ini menjawab dengan benar.