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
过去几个小时我一直在用谷歌搜索这个问题,但在任何地方都找不到类似的问题。 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