Rozdział 23 · Część III · Tworzymy projekt Python-

pyproject.toml i ustawienie projektu

src/safesort jest importowany, pyproject.toml opisuje Projekt i editable install łączy go z aktualnym środowiskiem.

SafeSort · Część 3 z 6Projekt

Łatwo tu połączyć cztery różne obiekty. Importowana paczka src/safesort/ zawiera __init__.py i moduły, które Python ładują z import safesort. Projekt (project) to biblioteka lub aplikacja zaprojektowana dla opakowanie; drzewo projektu źródłowego (project source tree) — jego pliki na dysku: pyproject.toml, src/, tests/ i dokumentacja. Pakiet dystrybucyjny (distribution package) to instalowalna wersja projektu; jeśli chodzi o konkretny To jest archiwum dystrybucji: wheel lub sdist. Zainstalowany projekt — Co pojawia się w środowisku Python po instalacji: pliki importowanego pakietu plus metadane, na których narzędzia takie jak pip oraz importlib.metadata się dowiedzą o nim.

Drzewo Źródłoweprojektupyproject.toml +src/safesort + testspython -m pipinstall -e .build frontend czytametadanych projektu, orazpołączy src-layout...Zainstalowaneprojekt w...środowisko wie, gdzieznajduje sięimportowany pakietPodwójne interfejsyimport safesort idrużyna safesort--help
pyproject.toml nie zamienia katalogu w import package: przechowuje metadane i ustawienia projektu, które służą do budowy archiwów dystrybucji (wheel/sdist)

W src-layout momencie uruchomienie Python z rootu repozytorium nie dodaje src/ w sys.path. Dlatego, aż do czasu Instalacje import safesort zwykle się kończy ModuleNotFoundError. Jest to właściwość oczekiwana układu, a nie znak, że __init__.py „nie zadziałało”

pyproject.toml
[project]
name = "safesort"
version = "0.1.0"
description = "A safe, non-destructive command-line file organizer."
dependencies = []

[project.scripts]
safesort = "safesort.cli:main"

Pole version koniecznie identyfikuje aktualną wersję Pakiet. Na razie po prostu zapiszmy 0.1.0 jako liczba pierwszych edukacyjnych wersje. Jak ułożone są numery wersji i dlaczego są trzy cyfry – przeanalizujmy to bliżej końca Projekt.

String safesort = "safesort.cli:main" mówi do instrumentu Ustawienia: Po instalacji stwórz zespół w środowisku safesort, która nazywa main() z modułu safesort.cli. Ten moduł jeszcze nie istnieje; napiszemy to na następnej stronie.

Dlaczego dependencies pozostaje puste
SafeSort nie posiada ani jednej obowiązkowej zależności od podmiotu trzeciego: pathlib, argparse, hashlib, shutil oraz json są zawarte w standardowej bibliotece Python.

Zainstaluj projekt w trybie edycji

Edytowalna instalacja (editable install) łączy środowisko Python bezpośrednio do kodu źródłowego projektu: zmiany w plikach src/safesort/ są widoczne natychmiast, bez konieczności ponownego montażu.

Terminal (środowisko aktywowane)
python -m pip install -e ".[dev]"
python -c "import safesort; print(safesort.__file__)"
safesort --help
Oficjalna dokumentacja
Python Tutorial — Packages
Packaging Python Projects
Distribution package vs. import package
src layout vs flat layout
Writing pyproject.toml