2016-06-24 21 views
0

Ich habe einen Code, der in Python 2.7, aber nicht in 3.5 ausgeführt wird, und ich kann den Grund nicht finden. Es hat mit dem Import zu tun.Importieren Problem mit Python 3

Der Stammordner hat einen Unterordner namens s. Vom Stammordner aus führe ich das Skript a.py aus, das die Zeile from s import * enthält.

Im Ordner s gibt es eine Datei b.py genannt, der die Einfuhrlinie: from c import c die die Klasse in c.py gespeichert zu importieren versucht, die s auch im Unterordner befindet.

Wenn ich das Skript a.py aus dem Stammordner ausführen, bekomme ich die ImportError sagen "Kein Modul mit dem Namen c".

In Python 2.7 läuft das ohne Probleme. Kann jemand bitte vorschlagen, was das Problem sein könnte und wie dies in Python 3.5 anders gemacht werden sollte?

+0

Interessant. Die Konfiguration, die Sie beschrieben haben, löst einen ImportError in python2 aus und lädt oder lädt das Modul c in python3 für mich nicht. –

+1

Haben Sie http://stackoverflow.com/questions/12172791/changes-in-import-statement-python3 gesehen? Es sieht ähnlich aus (d. H. "In Python 3 sind implizite relative Importe innerhalb von Paketen nicht mehr verfügbar"). – rkersh

+0

Siehe https://docs.python.org/3/whatsnew/2.5.html#pep-328-absolute-and-relative-imports –

Antwort

3

Implizite Einfuhren innerhalb Pakete ist nicht verfügbar für Python 3, so dazu Sie einen expliziten relativ Import verwenden, um die Arbeit benötigen:

from .s import * 

Dies sollte sowohl für Python arbeitet 2 und Python 3. Diesen macht auch Ihre Absicht deutlicher, dass Sie von einem relativen Paket importieren möchten, nicht von einem installierten Paket.

+0

Vielen Dank, so einfach :). Ich brauchte genau das - das relative Import-Zeug in p [ython 3 ist ein bisschen anders. Vielen Dank – splinter