2017-12-23 22 views
1

Meine Verzeichnisstruktur:Wie führe ich ein Skript in einem Unterverzeichnis aus? Import: Kein Modul mit dem Namen x

r/ 
|___init__.py 
| 
|_d1/ 
| |___init__.py 
| |_s1.py 
| 
|_d2/ 
    |___init__.py 
    |_s2.py 

Inhalt s1.py:

a = 1 

print(a) 

Inhalt s2.py:

from d1.s1 import a 

print(2 * a) 

ich in dem Verzeichnis navigieren /r und führen Sie python3 d1/s1.py aus. Terminal druckt 1. Wenn ich python3 d2/s2.py führe, erhalte ich einen Fehler ImportError: No module named 'd1'. Wie führt man das Skript s2 aus?

Antwort

1

Wenn Sie sagen,

from d1.s1 import a 

Python von der Suche nach einem Modul mit dem Namen d1 beginnen und dann im Innern, dass ein Modul mit dem Namen s1, und dann im Innern, das für ein Objekt einer benannte (die ein regelmäßigen sein kann Python-Objekt oder ein anderes Modul).

So

from d1.s1 import a 

in ein paar verschiedene Möglichkeiten funktionieren könnte:

-- d1/ 
    -- __init__.py 
     -- s1.py   <-- contains a variable called "a" 

oder

- d1/ 
    -- __init__.py 
    -- s1/ 
     -- __init__.py 
     -- a.py 

oder

-- d1/ 
| -- __init__.py 
    -- s1/ 
     -- __init__.py  <-- contains a variable called "a" 

in Ihrem Fall init .py funktioniert nur, wenn d1 und s1 und s2 in gleichen Verzeichnissen sind.

Wenn Sie das Modul s1 aus einem anderen Unterverzeichnis d1 importieren möchten, stellen Sie sicher, dass das Verzeichnis d1 im sys-Pfad steht.

Um d1 zu sys Pfad

sys.path.append('path_to_directory/d1') 
+0

Ich verstehe nicht ganz, hinzuzufügen. Wie kann ich es so machen, wie es ist? I.e. in/r Ich führe einen Befehl aus und das Skript s2.py funktioniert? Normalerweise habe ich eine ähnliche Ordnerstruktur, wobei d2 Tests sind. Wenn ich 'python3 -m unit test 'entdecke, weiß es irgendwie, wie man die Importe macht. – wtaga

+0

@wtaga Dann Verzeichnisse r/d1 ist nicht in sys.path –

Verwandte Themen