Ho un "struttura di file canonica" come quello (sto dando nomi sensati per facilitare la lettura):incubo con importazioni relative, come funziona pep 366?
mainpack/
__main__.py
__init__.py
- helpers/
__init__.py
path.py
- network/
__init__.py
clientlib.py
server.py
- gui/
__init__.py
mainwindow.py
controllers.py
In questa struttura, ad esempio moduli contenuti in ogni pacchetto può essere utile per accedere alle utility helpers
attraverso le importazioni relative a qualcosa di simile:
# network/clientlib.py
from ..helpers.path import create_dir
il programma è gestito "come uno script" utilizzando il file __main__.py
in questo modo:
python mainpack/
Cercando di seguire il PEP 366 ho messo in __main__.py
queste righe:
___package___ = "mainpack"
from .network.clientlib import helloclient
Ma durante l'esecuzione:
$ python mainpack
Traceback (most recent call last):
File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "path/mainpack/__main__.py", line 2, in <module>
from .network.clientlib import helloclient
SystemError: Parent module 'mainpack' not loaded, cannot perform relative import
Cosa c'è di sbagliato? Qual è il modo corretto di gestire e utilizzare efficacemente le importazioni relative?
Ho provato anche ad aggiungere la directory corrente al PYTHONPATH, non cambia nulla.
sono in grado di importare dalla directory Sto lanciando, ho a guardare questo meglio – pygabriel
@pygabriel E 'possibile per voi per zip e lo metti sul web da qualche parte? – extraneon
di sicuro! http://dl.dropbox.com/u/1276730/mainpack.zip – pygabriel