2012-02-05 9 views
6

voglio avere una gerarchia che assomiglia a questo (e deve assomigliare a questo)Importa in un'altra directory da un sub-directory "parallelo"

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

ho bisogno di attivare Frome ui.py main.py ma poi acces domain.py da menu.py. Come lo posso fare ?

ho fatto questo nel principale:

import ui_sub_directory.ui 

Questo in ui:

import domain_sub_directory.domain 

Ma il modulo di interfaccia utente non vede il modulo di dominio.

Cosa sto sbagliando?

BTW devo importare anche la classe con cui sto lavorando? e qual è la differenza tra questo e:

from x import y 

?

* Edit * per coloro che non capiscono che voglio importare da:

folder1 /folder2 /folder3 /module1 

Voglio importare questo:

folder1 /folder2 /module2 
+0

'import ui_sub_directory.ui()' è già sintassi e logica errata. – Gandaro

+0

Quasi un duplicato di questo: http://stackoverflow.com/questions/8951255/import-script-from-a-parent-directory –

+1

Potrei anche chiederti "qual è la differenza tra mele e pere", che sarebbe essere una domanda simile Sono completamente diversi. Il primo è sbagliato e il secondo no. Per favore [leggi le importazioni] (http://docs.python.org/tutorial/modules.html). – Gandaro

risposta

7

ti ha chiesto la differenza nelle dichiarazioni di importazione . È parzialmente una questione di spazio dei nomi per il quale l'oggetto verrà importato, e anche un modo per limitare l'esatta quantità di codice che viene importato.

import os 
from os import path 

Sia os che os.path sono moduli. Il primo importa l'intero modulo os e tutti i suoi sottomoduli. Questo potrebbe essere più del necessario, e per le grandi librerie potrebbe non essere necessario. Sebbene sia ancora possibile accedere al percorso tramite os.path

Il secondo modulo è un modo per importare solo in modo selettivo il modulo del percorso. Inoltre, invece di entrare nel tuo codice sotto lo spazio dei nomi os, ora vive al livello di root come solo path.

Mentre questo link Import Script from a Parent Directory fa dirvi tutto quello che c'è da sapere, ecco alcune informazioni più specifiche:

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

Allora i vostri vari script possono fare riferimento a un altro modulo tutto relativo alla sotto main_folder, come ad esempio:

from ui_sub_direcotory import menu 

from domain_sub_directory import domain 

import main 

Queste sono tutte importazioni valide all'interno del pacchetto.

+0

Se non rispondi, per favore scrivi almeno un link, non conosco abbastanza inglese per esprimere i miei pensieri, quindi non posso cercarlo. Ho trovato le importazioni normali, ma non "all'indietro". Grazie almeno per la seconda parte, credo. – Kalec

+0

I collegamenti sono già stati inseriti nei commenti. Ma ho aggiornato con qualche aiuto in più – jdi

+0

Ok, scusa per avere così tanti problemi semplici ma ottengo questo errore: "SyntaxError: (unicode error) 'unicodeescape' codec non può decodificare i byte nella posizione 13-15: fine della stringa in escape sequenza "Come potrebbe essere il mio percorso? D: \ Info \ Eclipse Workspace \ Test \ Test_src \ ui? o no ? Non capisco – Kalec