2017-07-17 5 views
0

Ich aktualisiere ein Modul, das ich in Python 2.7 schrieb, auf Python 3.6. Ich habe Bedenken, wie die __init__.py in beiden Versionen der Sprache verarbeitet wird.__init__.py in Python 3.6 vs Python 2.7

Insbesondere meine __init__.py sieht ungefähr so ​​aus:

from FT_optimize import * 
from FuzzyVars import * 
from FuzzyTree import * 

Wenn ich das Paket von Python 2.7 laden. Mit etwas wie folgt aus:

import FuzzyTree as ft 

kann ich den Namensraum aller in der __init__.py erklärt Module zugreifen. Etwas wie:

ft.optmize_partition(ft.FuzzyTree) 

jedoch der gleiche Code in Python 3.6 einen Fehler meldet:

AttributeError: module 'FuzzyTree' has no attribute 'optimize_partition' 

Jede Idee?

Aus der Python-Dokumentation habe ich keinen Unterschied der Kriterien sehen.

+0

ist Ihr aktuelles Arbeitsverzeichnis das Verzeichnis, in dem der '__init__' steht oder haben Sie das Paket installiert? – MSeifert

+0

Jetzt habe ich die Lösung gefunden. Es scheint, dass Sie in Python3 die relative Route zu den Dateien im Paket deklarieren müssen, auch wenn sie sich im selben Verzeichnis befinden. Also habe ich geschrieben: aus .FT_optimize import * (und das gleiche für die anderen Importe) und jetzt scheint alles zu funktionieren. –

Antwort

0

Die Lösung für das Problem (siehe mein Kommentar) ist die relative Route zu allen Modulen in der . Init .py einschließlich derjenigen, die im selben Verzeichnis sind.

Daher wird nach dem vorherigen Beispiel die init Py sieht jetzt:

from .FT_optimize import * 
from .FuzzyVars import * 
from .FuzzyTree import * 

(Sie sollten den Punkt vor dem Namen des Moduls erkennen). Und jetzt funktioniert alles.

Verwandte Themen