Python: udostępnianie wspólnego kodu rodzinie skryptów
Piszę rodzinę skryptów Pythona w ramach projektu; każdy skrypt znajduje się w podkatalogu projektu, w ten sposób:
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
Teraz kilka skryptów udostępnia jakiś kod. Współdzielony kod jest najlepiej uważany za część samego projektu, a nie za coś, co kompilowałbym osobno i zrobiłbym bibliotekę z, lub upuściłby na stronie PYTHONPATH. Mógłbym umieścić ten kod w różnych miejscach, takich jak wprojectroot
sam katalog lub w katalogu podrzędnymprojectroot
nazywacommon
(być może).
Jednak większość sposobów, o których dotychczas myślałem, polega na tym, że pakiety z moich podprojektów są puste__init__.py
pliki i używanie względnych importów (lub nadmiarowe manipulowanie nimi)sys.path
w każdym podprojekcie. Co gorsza, wygląda na to, że budowanie struktury pakietów wokół tej rodziny skryptów powoduje następujące ostrzeżenia odrzuconychPEP-3122:
Uwaga! Ten PEP został odrzucony. Guido wyświetla uruchomione skrypty w pakiecie jako anty-wzór.
Jeśli skrypty w pakiecie są anty-wzorzyste, jak mogę ustawić rzeczy w taki sposób, aby zachować wspólny kod w tym samym projekcie? Czy jest tu akceptowalny system oparty na modułach i pakietach? Jakie jest najczystsze podejście? (FWIW Wolałbym mieć plik taki jakshared.py
lubcommon.py
w katalogu głównym projektu, zamiast tworzyć katalog narzędziowy, który jest rodzeństwem „prawdziwych” podprojektów.)