Jeśli chcesz, aby pakiet, musisz zrozumieć, jak Python tłumaczy nazwy plików do nazw modułów.
Plik będzie dostępny jako mymodule
, zakładając, że interpreter znajdzie go w katalogu w ścieżce wyszukiwania w języku Python. Jeśli korzystasz z systemu plików niewrażliwego na wielkość liter, możesz również importować go przy użyciu wielkich liter (ale powinieneś unikać takiego zachowania zależnego od systemu).
Pakiet jest katalogiem zawierającym plik __init__.py
. Ostatnio pojawił się ruch, aby umożliwić pakiety bez tych plików, ale zamierzam zignorować ten mniej powszechny przypadek dla tej odpowiedzi. Pakiet staje się modułem wewnątrz Pythona, jego kod pochodzi z pliku __init__.py
. Plik mypackage/__init__.py
można zaimportować jako mypackage
.
Plik __init__.py
nie ma żadnego znaczenia bezpośrednio w ścieżce wyszukiwania w języku Python (cóż, prawdopodobnie można zaimportować moduł __init__
, ale jest to prawdopodobnie zły pomysł).
więc do sytuacji, oto odpowiedni układ plików:
toplevel/
mymodule/
__init__.py # put code here for mymodule
submodule.py # put code here for mymodule.submodule
toplevel
Tylko Folder powinien znajdować się w ścieżce wyszukiwania Pythona.
Widziałem, jak Python zniechęcił ludzi do umieszczania znaczącego kodu w 'mymodule/__ init __. Py' chociaż, np. [Alex Martelli] (http://stackoverflow.com/a/2361278/188535), co wydaje się być sprzeczne z tym. (Nie koniecznie muszę się z tym zgodzić ...) – detly
To prawda. Bardziej popularnym stylem byłoby umieszczenie rzeczywistego kodu 'mymodule' w nieudokumentowanym module podległym, a następnie zaimportowanie publicznego interfejsu API do' __init __. Py'. – Blckknght
dziękuję za odpowiedź informacyjną. Szkoda, że pyton potrzebuje takich brudnych hacków, żeby zrobić coś oczywistego. –