在python 2中,我可以创建一个这样的模块:
parent
->module
->__init__.py (init calls 'from file import ClassName')
file.py
->class ClassName(obj)
这很有效。在python 3中,我可以从命令解释器执行相同的操作并且它可以工作(编辑:这很有效,因为我在运行解释器的同一目录中)。但是,如果我创建__ init __.py并执行相同的操作:
"""__init__.py"""
from file import ClassName
"""file.py"""
class ClassName(object): ...etc etc
我得到ImportError:无法导入名称'ClassName',它根本看不到'file'。我会在导入模块时立即执行此操作,即使我可以通过直接引用它来导入所有内容(我不想这样做,因为它与我们的其余代码库完全不一致)。是什么给了什么?
答案 0 :(得分:17)
在python 3中,除非给出相对路径来执行导入,否则所有导入都是绝对的。您将需要使用绝对或相对导入。
绝对导入:
from parent.file import ClassName
相对导入:
from . file import ClassName
# look for the module file in same directory as the current module
答案 1 :(得分:11)