Wyobraź strukturę katalogów:Czy domyślnie import nie powinien być bezwzględny w python27?
/ a/ __init__.py b.py c.py c.py
Plik /a/b.py
wygląda:
import c should_be_absolute = c
wszystkich innych plików (w tym __init__
) są puste.
Po uruchomieniu skryptu testowego (przy użyciu Pythona 2.7):
import a.b
print a.b.should_be_absolute
z PYTHONPATH=/
z pustym katalogu (tak nic nie dodaje do PYTHONPATH
z bieżącego katalogu) pojawia
<module 'a.c' from '/a/c.py'>
gdzie według do PEP 328 i oświadczenie import <> is always absolute
Spodziewam się:
<module 'c' from '/c.py'>
Dane wyjściowe są zgodne z oczekiwaniami po usunięciu pliku /a/c.py
.
Czego mi brakuje? A jeśli to jest prawidłowe zachowanie - jak zaimportować moduł c
z b
(zamiast a.c
)?
Aktualizacja:
Według python dev mailing list wydaje się być błąd w dokumentacji. Import domyślnie jest nie w python27.
Jaka jest twoja kompletna pythonpath? Czy to tylko /? Powinieneś prawdopodobnie używać nazwy pakietu root – jdi
FWIW, działa to tak, jak oczekujesz w Pythonie 3. – geoffspear
@jdi - tak root jest jedyną rzeczą w PYTHONPATH (edytowałem oryginalny post, aby było bardziej jednoznaczne) – karolx