Ce face pyproject.toml
pyproject.toml stă în folderul principal al proiectului și descrie proiectul într-un format standard (PEP 621), citit de pip, uv, Poetry, Hatch și alte unelte. Formatul este TOML: secțiuni între paranteze drepte, perechi cheie = valoare, texte între ghilimele și liste între [ ].
Secțiunea [project] conține name, version, requires-python (versiunea minimă de Python) și dependencies, lista pachetelor de care are nevoie proiectul, cu limite de versiune. [dependency-groups] (PEP 735) ține pachetele folosite doar la dezvoltare, ca pytest. [build-system] spune ce unealtă construiește pachetul, iar secțiunile [tool.nume] sunt setările uneltelor (de exemplu [tool.ruff]).
Din Python 3.11, modulul standard tomllib citește fișiere TOML, așa că poți citi pyproject.toml și din cod.
Parametri
| Parametru | Descriere |
|---|---|
name |
Numele proiectului (cel de pe PyPI, dacă îl publici). |
version |
Versiunea proiectului, de exemplu "0.1.0". |
requires-python |
Versiunile de Python acceptate, de exemplu ">=3.11". |
dependencies |
Lista dependențelor, în același format ca în requirements.txt. |
[project.optional-dependencies] |
Extra-uri opționale, instalate cu pip install "proiect[extra]". |
[project.scripts] |
Comenzi de terminal create la instalare: magazin = "magazin:main". |
Ce returnează
Fișierul nu returnează nimic; uneltele îl citesc când instalează sau rulează proiectul.
Exemple
Exemplul 1: Citirea unui pyproject.toml cu tomllib
tomllib.loads() transformă textul TOML într-un dicționar Python. Pentru un fișier, folosește tomllib.load() cu fișierul deschis în mod binar ("rb").
import tomllib
from pathlib import Path
Path("pyproject.toml").write_text("""
[project]
name = "magazin-ana"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"requests>=2.34",
"pandas>=3.0",
]
[dependency-groups]
dev = ["pytest>=9.0"]
[tool.ruff]
line-length = 100
""", encoding="utf-8")
with open("pyproject.toml", "rb") as f:
config = tomllib.load(f)
proiect = config["project"]
print(proiect["name"], proiect["version"])
print("Python:", proiect["requires-python"])
for dependenta in proiect["dependencies"]:
print(" -", dependenta)
print("Dezvoltare:", config["dependency-groups"]["dev"])
print("Ruff:", config["tool"]["ruff"])
Rezultat
magazin-ana 0.1.0
Python: >=3.11
- requests>=2.34
- pandas>=3.0
Dezvoltare: ['pytest>=9.0']
Ruff: {'line-length': 100}
Exemplul 2: Eroare de sintaxă TOML
Textele trebuie puse între ghilimele. Fără ele, tomllib (și orice unealtă) refuză fișierul și spune rândul greșit.
import tomllib
text = """
[project]
name = magazin
"""
try:
tomllib.loads(text)
except tomllib.TOMLDecodeError as eroare:
print("Fișier invalid:", eroare)
Rezultat
Fișier invalid: Invalid value (at line 3, column 8)
Greșeli frecvente
- Scrii
name = magazinfără ghilimele. În TOML, textele se pun între ghilimele. - Pui aceeași dependență și în
requirements.txt, și înpyproject.toml, cu versiuni diferite. Alege un singur loc pentru lista de dependențe. - Deschizi fișierul cu
open("pyproject.toml")pentrutomllib.load(). Funcția cere modul binar:open(..., "rb").
Comenzi înrudite
uv init: Creează un proiect Python nou cu uv: pyproject.toml, .python-version, README și un depozit Git.uv add și uv remove: Adaugă sau elimină o dependență: actualizează pyproject.toml, uv.lock și mediul .venv dintr-o singură comandă.requirements.txt: Fișierul text cu pachetele de care are nevoie un proiect, câte unul pe rând, instalat cu pip install -r.