Capitolo 18: Packaging & Distribuzione
Organizza, costruisci e pubblica i tuoi progetti Python usando setuptools, pyproject.toml, wheel e Twine.
Scaricachapter18.py
Obiettivi
- Organizzare il codice in una cartella pacchetto con
__init__.py
. - Scrivere un
setup.py
consetuptools.setup()
. - Configurare
pyproject.toml
e metadata dichiarativi. - Costruire distribuzioni sorgente e wheel.
- Pubblicare pacchetti su Test PyPI e PyPI tramite Twine.
1. Struttura del progetto
Layout tipico:
myproject/
├── src/
│ └── mypackage/
│ ├── __init__.py
│ └── module.py
├── README.md
├── LICENSE
├── setup.py
└── pyproject.toml
2. setup.py con setuptools
from setuptools import setup, find_packages
setup(
name="mypackage",
version="0.1.0",
author="Your Name",
description="Una breve descrizione",
packages=find_packages("src"),
package_dir={"": "src"},
install_requires=[
"requests>=2.0"
],
entry_points={
"console_scripts": [
"mycmd = mypackage.module:main"
]
},
)
3. pyproject.toml (PEP 517/518)
[build-system]
requires = ["setuptools>=42","wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "mypackage"
version = "0.1.0"
description = "Una breve descrizione"
authors = [{name="Your Name", email="you@example.com"}]
dependencies = ["requests>=2.0"]
4. Costruzione delle distribuzioni
# installa build tool (opzionale)
python -m pip install --upgrade build
# genera sdist e wheel
python -m build
# output in dist/: mypackage-0.1.0.tar.gz e .whl
5. Pubblicazione su PyPI
# installa twine
python -m pip install --upgrade twine
# carica su Test PyPI
python -m twine upload --repository testpypi dist/*
# installa da Test PyPI per prova
pip install --index-url https://test.pypi.org/simple/ mypackage
# carica su PyPI ufficiale
python -m twine upload dist/*
Esercizi
- Crea un pacchetto minimale in src/, scrivi setup.py e genera un sdist.
- Aggiungi un console_script via entry_point e testalo localmente.
- Converti i metadata di setup.py in pyproject.toml e ricostruisci.
- Pubblica il pacchetto su Test PyPI e installalo da lì.