Kolejne zdanie po jednym cytujesz w swoim pytaniu confirms że nazwy zdefiniowanej w opakowaniu („zmienne”, by użyć sformułowania) mają pierwszeństwo przed Submoduły/pakietów:
The import
oświadczenie pierwsze testy czy przedmiot jest zdefiniowany w paczce; jeśli nie, zakłada, że jest modułem i próbuje go załadować.
Nie mogę znaleźć wyraźnego potwierdzenia w dokumentacji dla Pythona 2.7, że pakiety mają pierwszeństwo przed modułami. I nie znaleźć ten, w PEP 420:
Podczas przetwarzania importowania maszyny import będzie nadal iteracyjne nad każdym katalogu w ścieżce dominującej jak ma to miejsce w Pythonie 3.2. Patrząc na moduł lub pakiet o nazwie „foo”, dla każdego katalogu w ścieżce dominującej:
- Jeśli
<directory>/foo/__init__.py
zostanie znaleziony, regularny pakiet jest importowany i wrócił.
- Jeśli nie, ale zostanie znalezione
<directory>/foo.{py,pyc,so,pyd}
, moduł zostanie zaimportowany i zwrócony.
... co, podczas gdy tylko wyraźnie stwierdza, że jest to zachowanie w Pythonie 3.2, może być rozumiany w ten sposób: „... i poprzednie wersje Pythona”. Ponownie, to potwierdza twoje odkrycie, że pakiety mają pierwszeństwo przed modułami.
Jednak: Byłby to pomysł straszny polegać na tym szczegóły realizacji. Liczba ludzi na świecie, którzy są tego świadomi, prawdopodobnie nie wykracza daleko poza rdzennych programistów Pythona; jest to niedoinformowane i ma na celu wywołanie wyjątkowo trudnych do zlokalizowania błędów.