2012-07-13 20 views
5

Ich experimentiere mit Python, vor allem die Fehlersuche anderen Menschen Code. Ich versuche, ein Programm auszuführen, "".Fehler Python-Import aus einem anderen Ordner

Ich verwende das Programm von path\folderA

ich eine Störung erhalte:

ImportError: No module named fff.ggg.ppp 

program.py einen Import enthält:

from fff.ggg.ppp import mmm 

Im Ordner "Pfad \ ordnerB" dort sind: "path\folderB\fff\__init__.py" "path\folderB\fff\ggg"

Ordner ggg enthält auch __init__.py sowie Programm ppp.py

Aus der Lektüre anderen Beiträgen, wie Python error "ImportError: No module named" Ich verstehe, dass die __init__.py mit einem Ordner ein „Paket“ macht die Importe aus es möglich macht - aber es doesn‘ t arbeiten, da ich einen Fehler bekomme.

Das hat für andere Leute funktioniert, die mit diesen Projekten gearbeitet haben, also stimmt etwas nicht mit meinem Setup.

Ich habe etwas über die Verzeichnisse gelesen, die im sys.path sein müssen. Bedeutet das, dass ich sie zum Umgebungsvariablenpfad hinzufügen muss? Das würde bedeuten, dem PATH viele Verzeichnisse hinzuzufügen, das kann es nicht sein.

So fand ich auch die folgenden:

import sys 
sys.path.append(<path to FolderB>) 

Das bedeutet aber, den Code zu ändern (die für andere Personen nicht notwendig war) und Hartcodierung einen Weg zu dem, was es auf meinem lokalen Rechner ist - die Ich sollte nicht müssen, oder?

Ich kann es nicht visualisieren - anscheinend soll ich den Code nicht ändern und den physischen Pfad zum Importmodul fest codieren - wie kann also ein Programm von folderA in Ordner B nach einem Import suchen?

Wie funktioniert die Magie von __init__.py?

+1

Python sieht in der 'PYTHONPATH' Umgebungsvariable, nicht 'PATH' – mgilson

Antwort

1

I can't visualize it - apparently I am not supposed to change the code and hard-code the physical path to the import module - so how can a program from folderA even know to look in folderB for an import ?

Sie haben Recht. Irgendwie musst du Python sagen, dass er nach importierten Modulen in Ordner B sucht. Es gibt keine __init__.py Magie, mit der Sie aus anderen Ordnern auf Ihrer Festplatte importieren können.

Normalerweise, wenn Sie verschiedene verschiedene Python-Pakete wie diese haben, funktionieren sie, indem sie in die Python-Bibliothek installiert werden. Auf diese Weise können sie von überall importiert werden. Dies wird normalerweise durch ein setup.py Skript erreicht. Überprüfen Sie, ob folderB eins hat.Führen Sie es mit python setup.py install.

Wenn das nicht funktioniert, benötigen wir weitere Informationen darüber, wie dieser Code strukturiert ist.

+0

Danke, ich hatte das Setup.py gesehen aber wusste nicht, wie man es benutzt. Es funktionierte ! – Thalia

0

Ordner B muss auf dem sys.path sein, also müssten Sie entweder mmm nach A verschieben oder sys.path innerhalb von A ändern (nicht sicher, ob das funktioniert). __init__.py sagt Python, dass der Ordner ein Paket ist, so dass Sie Ordner mit __init__.py in Ordnern mit __init__.py und Python behandelt die Ordner als Teile des übergeordneten Ordners. Schauen Sie sich Sympy oder fast jede große Python-Bibliothek an und Sie werden eine solche Struktur finden. Es kann auch Code enthalten, der beim Import ausgeführt wird, kann aber auch leer sein.

Verwandte Themen