Python 3.5 vs Python 2.7:模块导入子模块

Python 3.5 vs Python 2.7: Modules importing submodules

过去几个小时我一直在用谷歌搜索这个问题,但在任何地方都找不到类似的问题。 2.7 和 3.5 的文档看起来也一样,所以我认为没有记录这种行为。

这是我的目录结构:

project
    -- project.py
    -- api
        -- __init__.py
        -- subapi
            -- __init__.py

project/project.py 的内容:import api

project/api/__init__.py 的内容:import subapi

如果我从项目文件夹中执行 python project.py(使用 python 2.7),它 returns 不会出错。如果我对 python 3 (python3 project.py) 做同样的事情,那么它会崩溃

Traceback (most recent call last):
  File "project.py", line 1, in <module>
    import api
  File "/home/me/Documents/project/api/__init__.py", line 1, in <module>
    import subapi
ImportError: No module named 'subapi'

如果我重写 import 语句以使用相对于项目目录 (import api.subapi) 的路径,那么它可以与 python 2 以及 3 一起使用。但这不是一个令人满意的解决方案,因为要求我从子模块中引用父模块,这违背了模块化的想法..

有谁知道我可以做些什么来恢复 python2 的行为?模块搜索算法应优先使用 import 语句在文件的本地目录中搜索。顺便说一句,它还应该将这些文件优先于内置模块。尝试导入模块 'test'..

--编辑-- Whosebug 要求我将我的问题与另一个名为 "How to do relative imports" 的问题区分开来。我认为这个问题是不同的,因为我专门询问两个版本之间的差异。使用相对导入是解决方案,而不是问题所在。

使用显式相对导入:

from . import subapi