Zastanawiałem się, czy ktoś może rzucić światło na to. Mamy wiele bibliotek pakietów z tym samym pakietem głównym, np. a
. Mam też pakiet a.b
się w X i pakować a.c
zlokalizowany w Y. Obie X i Y są w moim PYTHONPATH
i kiedy zrobić:Python importować różne podpakiety z tą samą nazwą pakietu root i różnymi lokalizacjami
import a.c
import a.b
pojawia się błąd: "No module named b"
. Po przeczytaniu dookoła wydaje mi się, że po załadowaniu a.c
python zapisuje informacje o a
, a kiedy przychodzę zrobić a.b
, ponieważ ma informacje o a
już nigdy nie zadaje sobie trudu szukania w lokalizacji X dla a.b
i zgłasza błąd, że nie moduł o nazwie b
można znaleźć.
Co więcej, stwierdziłem, że kolejność, w której X i Y są określone w PYTHONPATH
, wydaje się mieć wpływ na import. Na przykład, kiedy robię
PYTHONPATH=$PYTHONPATH:X:Y python
>>> import a.b # works
>>> import a.c # fails
Ale jeśli to zrobię
PYTHONPATH=$PYTHONPATH:Y:X python
>>> import a.b # fails
>>> import a.c # works
Czy to prawda, a jeśli tak, to w jaki sposób można to obejść? Wygodnie jest mieć wspólną nazwę root modułu i różne pakiety podrzędne znajdują się w różnych projektach itp. Oczywiście, pochodzę z punktu widzenia Javy, gdzie można robić takie nakładanie się.
Dzieje się tak zarówno w Pythonie 2 i 3 – Alex