que tienen una "estructura de archivos canónica" como que (estoy dando nombres sensibles para facilitar la lectura):pesadilla con importaciones relativas, ¿cómo funciona 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
En esta estructura, por ejemplo, los módulos contenidos en cada paquete lo desea, puede acceder a los servicios públicos helpers
a través de las importaciones relativas en algo como:
# network/clientlib.py
from ..helpers.path import create_dir
el programa es ejecutado "como una secuencia de comandos" mediante el archivo __main__.py
de esta manera:
python mainpack/
Tratando de seguir la PEP 366 He puesto en __main__.py
estas líneas:
___package___ = "mainpack"
from .network.clientlib import helloclient
Pero cuando se ejecuta:
$ 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
¿Qué pasa? ¿Cuál es la forma correcta de manejar y usar efectivamente las importaciones relativas?
He intentado también agregar el directorio actual a PYTHONPATH, nada cambia.
soy capaz de importar desde el directorio Estoy lanzando, no tengo que ver esto mejor – pygabriel
@pygabriel ¿Es posible que usted pueda comprimir y ponerlo en la web en alguna parte? – extraneon
seguro! http://dl.dropbox.com/u/1276730/mainpack.zip – pygabriel