【发布时间】:2016-12-01 23:54:40
【问题描述】:
我仍然习惯于构建 python 项目和相对导入,我认为我主要了解相对导入,直到我在 Py3 上测试时遇到问题。
我有一个结构如下的项目:
scriptA.py
package/__init__.py
scriptB.py
scriptC.py
而__init.py__ 包含以下内容:
from scriptB import functionB
from scriptC import functionC
在 scriptA import package as _package 在 Py2.7 中工作,但在 Py3.5 上失败并出现错误 ImportError: No module named 'scriptB'。
如何以与 Py2 和 3 兼容的方式导入 package?为什么会有所不同?
我尝试过使用import .package as _package,但这似乎并没有改变任何东西(仍在考虑何时使用. 和.....
【问题讨论】:
-
我认为您正在执行隐式相对导入,这在 Py3 中是不允许的。如果你输入
from __future__ import absolute_import这应该关闭隐式 rel。在 Py2 中也可以导入,并引发与 Py3 中相同的错误。 @pbreach 演示的“使用点”是explicit relative import 的一个示例,它与 Py2/3 兼容。改用显式的相对或绝对的导入,绝不是隐式的。
标签: python python-3.x packages python-2.x importerror