Załóżmy, że mam przydatną funkcję lub klasę (lub cokolwiek) w języku Python, useful_thing
która istnieje w jednym pliku. Istnieją dwa podstawowe sposoby organizacji drzewa źródłowego. Pierwszy sposób wykorzystuje pojedynczy moduł:
- setup.py
- README.rst
- ...etc...
- foo.py
gdzie useful_thing
jest zdefiniowany w foo.py
. Druga strategia polega na stworzeniu pakietu:
- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py
gdzie useful_thing
jest zdefiniowany w module.py
. W pudełku __init__.py
wyglądałoby to tak
from foo.module import useful_thing
więc w obu przypadkach możesz to zrobić from foo import useful_thing
.
Pytanie: Który sposób jest preferowany i dlaczego?
EDYCJA: Ponieważ użytkownik gnat mówi, że to pytanie jest źle sformułowane, dodam, że oficjalny samouczek dotyczący pakowania w Pythonie nie wydaje się komentować, która z metod opisanych powyżej jest preferowana. Wyraźnie nie podam mojej osobistej listy zalet i wad, ponieważ interesuje mnie, czy istnieje metoda preferowana przez społeczność, a nie generowanie dyskusji na temat zalet i wad :)
źródło
Odpowiedzi:
Robisz najprostszą rzecz, która Ci odpowiada .
W przypadku modułu jednofunkcyjnego nie ma absolutnie żadnego sensu tworzenie pakietu. Pakiety są przydatne do tworzenia dodatkowej przestrzeni nazw i / lub do organizowania kodu w wielu modułach.
json
Iunittest
moduły w standardowej biblioteki Pythona są naprawdę pakiety na przykład, dla celów organizacyjnych kod. Ale doskonale jest pozostawić kod, który obecnie znajduje się w jednym pliku Pythona, jako jeden moduł.Jeśli chcesz przykłady:
six
jest dystrybucją tylko jednego modułusetuptools_subversion
,formatflowed
,rtfunicode
.Dobry przykład projektów, które naprawdę doskonale wykorzystują pakiety, spójrz na:
requests
Nie ma „oficjalnej” rekomendacji; obie opcje są całkowicie ważne.
źródło