referenciar modulos de una estructura especifica
Joaquin Jose del Cerro Murciano
jjdelcerromurciano en yahoo.es
Mie Nov 16 09:48:39 CET 2005
Hola
releyendo el hilo (he estado fuera unos dias), tu problema como
ya te han apuntado muchos es que desde un subpaquete no
se puede importar asi alegremente un modulo de otro subpaquete.
Como tambien te han apuntado, lo que necesitas es tener en el path
(PYTHONPATH o sys.path) la ruta del paquete principal (por llamarlo de
alguna manera).
Y por ultimo como tambien te han apuntado, lo mas facil es que no
invoques a tu programa principal.py directamente, sino que tengas un
lanzador que ajusta las cosas y lo lanza.
Poniendo todo esto junto, he hecho lo siguiente:
- renombro principal.py a aplicacion.py. Ademas corrijo alguna cosilla menor.
- En principal.py meto un lanzador que ajusta el sys.path, importa
aplicacion.py y lanza la aplicacion por su main.
- La estructura de directorios que he usado para las pruebas es:
drwxr-xr-x 4 jjdelcerro wheel 512 Nov 16 08:29 Proyecto
./Proyecto:
total 6
drwxr-xr-x 2 jjdelcerro wheel 512 Nov 16 08:33 Gui
drwxr-xr-x 2 jjdelcerro wheel 512 Nov 16 08:33 Logica
-rw-r--r-- 1 jjdelcerro wheel 0 Nov 16 08:14 __init__.py
./Proyecto/Gui:
total 6
-rw-r--r-- 1 jjdelcerro wheel 0 Nov 16 08:15 __init__.py
-rw-r--r-- 1 jjdelcerro wheel 110 Nov 16 08:33 aplicacion.py
-rw-r--r-- 1 jjdelcerro wheel 370 Nov 16 08:31 principal.py
./Proyecto/Logica:
total 6
-rw-r--r-- 1 jjdelcerro wheel 0 Nov 16 08:15 __init__.py
-rw-r--r-- 1 jjdelcerro wheel 132 Nov 16 08:32 persona.py
Si no he entendido mal es la que tu propones.
Y el contenido de los ficheros es:
Silvanesti:jjdelcerro# more Proyecto/Logica/persona.py
class Persona(object):
def __init__(self,nombre):
self._nombre= nombre
def obtener_nombre(self):
return self._nombre
Silvanesti:jjdelcerro# more Proyecto/Gui/aplicacion.py
from Proyecto.Logica.persona import Persona
def main():
per=Persona('Hola')
print per.obtener_nombre()
Silvanesti:jjdelcerro# more Proyecto/Gui/principal.py
import os
import sys
def _localPath(*subdir):
path = globals().get("__file__",None)
if path == None:
path = sys.argv[0]
path = os.path.abspath(os.path.dirname(path))
if path =="":
path = os.getcwd()
return os.path.join(path, *subdir)
if __name__=="__main__":
sys.path.insert(0,_localPath("..",".."))
import aplicacion
aplicacion.main()
Silvanesti:jjdelcerro#
Bueno, espero que te sirba de algo.
Si tienes dudas..., pues pregunta.
Un saludo
Joaquin.
______________________________________________
Renovamos el Correo Yahoo!
Nuevos servicios, más seguridad
http://correo.yahoo.es
Más información sobre la lista de distribución Python-es