2016-07-25 29 views
2

Ich erhalte einen Fehler beim Importieren meiner code_parsing Paket mit Python 3.2.ImportError auf Python 3, funktionierte gut auf Python 2.7

Verzeichnis code_parsing ist innerhalb PYTHONPATH und enthält die folgenden Dateien (einige andere auch, aber irrelvant hier)

code_parsing/__init__.py 
code_parsing/ada.py 

__init__.py enthält:

from ada import * 
try: 
    from c import * 
except ImportError: 
    # can happen if ply.lex is not available 
    pass 

Als mein Modul einge ich diesen Fehler:

>>> import code_parsing 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "K:\CODE\pythonlib\code_parsing\__init__.py", line 1, in <module> 
    from ada import * 
ImportError: No module named ada 

Wi th Python 2.7 auf der gleichen Maschine mit der gleichen Umgebung es funktioniert gut.

Einige Präzisierungen:

  • importieren Andere im gleichen Verzeichnis die gleiche directory/__init__.py Struktur funktionieren werden.
  • ada.py ist eine reine Python-Datei, keine speziellen kompilierten/Cython-/.pyd-Dateien.

Irgendwelche Ideen?

Antwort

4

Python 3 verwendet absolute Importe. Jeder nicht qualifizierte Name wird als Top-Level-Modul importiert.

Sie haben kein ada Top-Level-Modul. Sie haben einen code_parsing.ada Modul statt, so dass die folgenden arbeiten:

from code_parsing.ada import * 

oder eine explizite 'lokales Paket' Referenz verwenden:

from .ada import * 

Sie das gleiche Verhalten in Python erzwingen 2 mit:

from __future__ import absolute_import 

Weitere Informationen finden Sie unter PEP 328 – Imports: Multi-Line and Absolute/Relative.