Python 3上的ImportError,在python 2.7上运行良好


问题内容

code_parsing使用Python 3.2导入我的软件包时出现错误。

目录code_parsing位于其中,PYTHONPATH并包含以下文件(其他文件也一样,但此处不相关)

code_parsing/__init__.py
code_parsing/ada.py

__init__.py 包含:

from ada import *

导入模块时出现此错误:

>>> 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

在具有相同环境的同一台计算机上使用python 2.7可以正常工作。

一些精度:

  • 其他人可以使用相同的directory/__init__.py结构导入相同的目录。
  • ada.py 是一个纯python文件,没有特殊的已编译/cython/.pyd内容。

有任何想法吗?


问题答案:

Python 3使用 绝对导入 。任何不合格的名称都将作为 顶级模块 导入。

您没有顶级ada模块。code_parsing.ada相反,您有一个模块,因此可以使用以下模块:

from code_parsing.ada import *

或使用明确的“本地包”参考:

from .ada import *

您可以使用以下命令在Python 2中强制执行相同的行为:

from __future__ import absolute_import

有关详细信息,请参见PEP 328 – 导入:多行和绝对/相对