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