2016-12-28 8 views
0

Ich versuche, ein Modul aus einem anderen Verzeichnis zu importieren, das von demselben übergeordneten Element stammt. Ich habe den Code in Python 2.7 zu arbeiten, aber nicht in Python 3.5.Auflösen von gemischten Schrägstrichen beim Importieren eines Moduls

Ich bin in py_file.py Arbeits ===> H: /other/apple/work_here/py_file.py

Ich möchte total_text.py von ===> H importieren:/Sonstiges/Apfel /banana/total_text.py

Der Import funktioniert in Python 2.7, aber nicht in Python 3.5. In 3,5 I eine rote Wellenlinie unter Banane zu bekommen und wenn ich den Code der Fehler lautet: „Kein Modul namens‚Banane‘“

laufen
import sys 
import os 
os.chdir(os.path.join("H:\\", "other", "apple", "work_here")) 
sys.path.insert(0, os.path.join(os.path.split(__file__)[0], "..")) 
import banana.total_text 

Um das Problem zu beheben, ausgeführt ich die folgenden Druck Aussagen in beiden Programmen und gefunden Ich bekomme gemischte Schrägstriche in Python 3.5-Programm.

In Python 2.7, erhalte ich:

Druck sys.path [0] =====> H: \ andere \ Apfel \ work_here .. # Hinweis: Es gibt eine \ nach dem e in hier ist das nicht aufgetaucht.

Druck os.listdir (sys.path [0]) =====> [u'banana 'u'work_here']

In Python 3.5 erhalte ich folgendes:

print sys.path [0] =====> H:/other/work_here .. # Beachten Sie, dass es ein \ nach dem e hier gibt, das nicht angezeigt wurde.

Druck os.listdir (sys.path [0]) =====> [ 'Apfel', 'work_here']

Ich suchte herum und eine teilweise fix gefunden: Durch os.path Zugabe. abspath (x) oder os.path.normpath (x) wo x = os.path.join (os.path.split (file) [0], "..") Ich habe es zwei Verzeichnisse zurück zu gehen H: \ andere ===> die Import-Anweisung funktioniert, wenn ich es schreiben: Import apple.banana.total_text

Mit der os.path.abspath() Version, die ich erhalten:

drucken (sys.path [0]) =====> H: \ andere

drucken (os.listdir (sys.path [0])) =====> ['apple', 'work_here']

Ich versuche, die Python 3.5-Version auf die gleiche Weise wie die Python 2.7-Version funktionieren zu lassen und zu verstehen, was dazu führen würde, dass sich 3.5 anders verhält.

+0

überprüfen os.sep https://docs.python.org/2/library/os.html – Wyrmwood

+0

Ich konnte die 3.5-Version zu arbeiten. Ich habe ersetzt: sys.path.insert (0, os.path.join (os.path.split (__ Datei __) [0], "..")) mit sys.path.insert (0, '..') – Oedipus

Antwort

0

Ich konnte die 3.5-Version zu arbeiten. Ich habe ersetzt: sys.path.insert (0, os.path.join (os.path.split (Datei) [0], "..")) mit sys.path.insert (0, '..')

+0

Außerdem können Sie all diesen Unsinn hinter sich lassen, wenn Sie __init__.py in jeden Ihrer Quellordner legen und aus dem Projektverzeichnis ausführen. Dann funktionieren Importe nur. https://docs.python.org/2/tutorial/modules.html – Wyrmwood

+0

Dies schien nicht ein beliebtes Thema, vielleicht aus dem Grund, den Sie gerade gesagt haben. – Oedipus

Verwandte Themen