【发布时间】:2017-06-19 22:01:41
【问题描述】:
过去几个小时我一直在谷歌上搜索这个问题,但在任何地方都找不到类似的问题。 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 要求我将我的问题与另一个名为“如何进行相对导入”的问题区分开来。我认为这个问题是不同的,因为我专门询问两个版本之间的差异。使用相对进口是解决方案,而不是问题。
【问题讨论】:
-
尝试使用相对路径,即
import .subapi -
这绝对是有记录的,但我可以看到对于初学者来说,文档可能很难找到/阅读。
-
有文档记录,但不是很容易找到。 Python 3 中的导入更加明确:wiki.python.org/moin/PortingPythonToPy3k#relative-importsstackoverflow.com/a/34462008/554546
-
@Marandil:我认为这行不通; PEP 328 表示显式相对导入必须使用
from语法。
标签: python python-2.7 python-3.5 python-module