过去几个小时我一直在谷歌上搜索这个问题,但在任何地方都找不到类似的问题。此外,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)从项目文件夹内部,它返回没有错误。如果我对 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 api.subapi
),然后它可以与 python 2 和 3 一起使用。但这不是一个令人满意的解决方案,因为这需要我从子模块中引用父模块,这有点违背了模块化的想法。
有谁知道我可以做什么来恢复 python2 的行为?模块搜索算法应优先使用 import 语句在文件的本地目录中进行搜索。顺便说一句,它还应该优先考虑这些文件高于内置模块。尝试导入模块“测试”..
- 编辑 -
stackoverflow 要求我将我的问题与另一个名为“如何进行相对导入”的问题区分开来。我认为这个问题是不同的,因为我具体询问两个版本之间的差异。使用相对导入是解决方案,而不是问题。