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

Jea*_*bre 8 python import module python-2.7 python-3.x

code_parsing使用Python 3.2 导入我的包时遇到错误.

目录code_parsing位于PYTHONPATH并包含以下文件(其他一些文件,但在此处为irrelvant)

code_parsing/__init__.py
code_parsing/ada.py
Run Code Online (Sandbox Code Playgroud)

__init__.py 包含:

from ada import *
Run Code Online (Sandbox Code Playgroud)

导入我的模块时出现此错误:

>>> 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
Run Code Online (Sandbox Code Playgroud)

使用相同环境的同一台机器上的python 2.7,它可以正常工作.

一些准确性:

  • 其他人使用相同的directory/__init__.py结构在同一目录中导入工作正常.
  • ada.py是一个纯python文件,没有特殊的编译/ cython/.pyd东西.

有任何想法吗?

Mar*_*ers 10

Python 3使用绝对导入.任何非限定名称都将作为顶级模块导入.

您没有顶级ada模块.你有一个code_parsing.ada模块,所以以下工作:

from code_parsing.ada import *
Run Code Online (Sandbox Code Playgroud)

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

from .ada import *
Run Code Online (Sandbox Code Playgroud)

您可以在Python 2中强制执行相同的行为:

from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)

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