Immaginate la struttura di directory:Le importazioni non dovrebbero essere assolute per impostazione predefinita in python27?
/ a/ __init__.py b.py c.py c.py
File /a/b.py
assomiglia:
import c should_be_absolute = c
Tutti gli altri file (tra cui __init__
) sono vuoti.
Quando si esegue uno script di test (usando python 2.7):
import a.b
print a.b.should_be_absolute
con PYTHONPATH=/
da una directory vuota (quindi nulla viene aggiunto PYTHONPATH
dalla directory corrente) ottengo
<module 'a.c' from '/a/c.py'>
dove secondo a PEP 328 e la dichiarazione import <> is always absolute
Mi aspetto:
<module 'c' from '/c.py'>
L'output è come previsto quando rimuovo il file /a/c.py
.
Cosa mi manca? E se questo è il comportamento corretto - come importare il modulo c
da b
(anziché a.c
)?
Aggiornamento:
Secondo python dev mailing list sembra essere un bug nella documentazione. Le importazioni sono non per default in python27.
Qual è il tuo pythonpath completo? È solo /? Probabilmente dovresti usare il nome del pacchetto radice – jdi
FWIW, questo funziona come previsto in Python 3. – geoffspear
@jdi - sì la radice è l'unica cosa nel PYTHONPATH (modificato il post originale per renderlo più esplicito) – karolx