2012-02-05 20 views
6

Quiero tener una jerarquía que tiene este aspecto (y tiene que tener este aspecto)módulo de importación en otro directorio desde un subdirectorio "paralelo"

main_folder\ 
    main.py 
    domain_sub_directory\ 
     __init__.py 
     domain.py 
    ui_sub_direcotory\ 
     __init__.py 
     menu.py 

Necesito activar Frome ui.py main.py pero luego acceda a domain.py desde menu.py. Cómo puedo hacer eso ?

hice esto en principal:

import ui_sub_directory.ui 

Esto a su interfaz de usuario:

import domain_sub_directory.domain 

Sin embargo, el módulo de interfaz de usuario no ve el módulo de dominio.

¿Qué estoy haciendo mal?

BTW ¿Necesito también importar la clase con la que estoy trabajando? y cuál es la diferencia entre esto y:

from x import y 

?

* Editar * para aquellos que no entienden que quiero importar de:

folder1 /folder2 /folder3 /module1 

quiero importar esto:

folder1 /folder2 /module2 
+0

'import ui_sub_directory.ui()' ya tiene una sintaxis y una lógica incorrectas. – Gandaro

+0

Casi un duplicado de esto: http://stackoverflow.com/questions/8951255/import-script-from-a-parent-directory –

+1

También podría preguntarle "¿cuál es la diferencia de las manzanas y las peras", que haría ser una pregunta similar. Ellos son completamente diferentes. El primero está mal, y el segundo no. Por favor [lea sobre importaciones] (http://docs.python.org/tutorial/modules.html). – Gandaro

Respuesta

7

solicitó usted a la diferencia en las declaraciones de importación . Es parcialmente una cuestión del espacio de nombre para el que se importará el objeto, y también una forma de limitar la cantidad exacta de código que se importa.

import os 
from os import path 

Ambos os y os.path son módulos. El primero importa todo el módulo de os y todos sus submódulos. Esto podría ser más de lo que necesita, y para grandes bibliotecas podría ser innecesario por encima. Aunque todavía puede acceder a la ruta a través de os.path

La segunda forma es una forma de importar de forma selectiva solo el módulo de ruta. Además, en lugar de entrar en el código en el espacio de nombres os, ahora vive en el nivel raíz como solo path.

Si bien este enlace Import Script from a Parent Directory Qué te dice todo lo que necesita saber, aquí hay alguna información más específica:

# this will make your package available on your pythonpath 
sys.path.append("/path/to/main_folder") 

A continuación, sus diversos guiones pueden hacer referencia a otro módulo todo relativo a bajo main_folder, tales como:

from ui_sub_direcotory import menu 

from domain_sub_directory import domain 

import main 

Estas son todas las importaciones válidas dentro de su paquete.

+0

Si no responde, envíe un enlace, no sé inglés suficiente para transmitir mis pensamientos, así que no puedo buscarlo. He encontrado importaciones normales, pero no "al revés". Gracias al menos por la segunda parte, supongo. – Kalec

+0

Los enlaces ya han sido publicados en los comentarios. Pero actualicé con algo más de ayuda – jdi

+0

Ok, disculpe por tener tantos problemas simples pero recibo este error: "SyntaxError: (error unicode) codec 'unicodeescape' no puede decodificar bytes en la posición 13-15: fin de cadena en escape secuencia "¿Cómo podría ser mi camino? D: \ Info \ Eclipse Workspace \ Test \ Test_src \ ui? o no ? No lo entiendo – Kalec

Cuestiones relacionadas