Tworzenie wielu modułów Pythona w różnych katalogach, które współdzielą część struktury pakietu

Pracuję nad projektem Django, który zawiera pojedynczą aplikację. Aplikacja zostanie wydana na licencji GPL, więc chcę ją opracować niezależnie od projektu - osobistej strony za pomocą aplikacji. Próbuję użyć struktury pakietu opartej na nazwie mojej domeny zarówno dla projektu, jak i aplikacji, i tam napotykam problemy.

Oto moja struktura plików (w razie potrzeby z __init__.py):

$HOME/django-sites/mydomain
$HOME/django-apps/mydomain/cms

I moja PYTHONPATH:

$HOME/django-sites:$HOME/django-apps

Jeśli uruchomię interpreter Pythona (z dowolnego katalogu w systemie plików), mogę importować klasy z witryny, ale nie z aplikacji. Jeśli odwrócę kolejność dwóch wpisów w PYTHONPATH (najpierw aplikacje, potem witryny), mogę zaimportować z aplikacji, ale nie z witryny.

Wygląda na to, że Python próbuje tylko zaimportować z pierwszego wpisu w PYTHONPATH, który zawiera pierwszą część nazwy pakietu. Czy to jest poprawne? Czy to oczekiwane zachowanie? Jeśli tak, mogę umieszczać moduły w strukturach pakietów, takich jak domena / app1, domena / aplikacja2, jeśli żyją w tej samej strukturze katalogów - niezależnie od PYTHONPATH.

To nie jest show-stopper, ponieważ mogę zmienić nazwę witryny, ale jest znacznie inaczej niż oczekiwałem. Samouczek Pythona wspomina __path__, ale nie mam pojęcia, jak go używać:

Pakiety obsługują jeszcze jeden specjalny atrybut, __path__. Ta inicjalizacja ma być listą zawierającą nazwę katalogu zawierającego pakiet __init__.py przed wykonaniem kodu w tym pliku. Ta zmienna może być modyfikowana; wpływa to na przyszłe wyszukiwania modułów i podpakietów zawartych w pakiecie.

Chociaż ta funkcja nie jest często potrzebna, można jej użyć do rozszerzenia zestawu modułów znalezionych w pakiecie.

Czy ktoś inny to zetknął? Czy jest coś, co mogę zrobić z __path__, aby ta funkcja była zgodna z oczekiwaniami?

questionAnswers(3)

yourAnswerToTheQuestion