Capitolo 18: Packaging & Distribuzione

Organizza, costruisci e pubblica i tuoi progetti Python usando setuptools, pyproject.toml, wheel e Twine.

Scarica chapter18.py

Obiettivi

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

  1. Crea un pacchetto minimale in src/, scrivi setup.py e genera un sdist.
  2. Aggiungi un console_script via entry_point e testalo localmente.
  3. Converti i metadata di setup.py in pyproject.toml e ricostruisci.
  4. Pubblica il pacchetto su Test PyPI e installalo da lì.
```