我正在尝试从另一个模块中的文件导入一个函数,但一直收到以下错误。
ValueError: Attempted relative import in non-package
我看过很多文章说绝对而不是相对导入,但后来得到错误
ImportError: No module named app.main.events
我的文件结构
\_ dir
\_ __init__.py
\_ app
\_ main
\_ __init__.py
\_ events.py
\_ game
\_ __init__.py
\_ run.py
events.py
def my_function():
do something....
run.py
from ..main.events import my_function
# returns
Attempted relative import in non-package
from app.main.events import my_function
# returns
No module named app.main.events
我无法看到我出错的地方......这可能是非常简单的事情。
答案 0 :(得分:0)
只要您在包中使用它们并且是明确的,例如from . import foo
,相对导入就可以了。文章所说的不好是当你import foo
并且依赖名为foo.py的文件在同一目录中时。
如果您直接执行python run.py
,解释器不知道run.py是更大包的一部分。您需要使用python -m run.main
将其作为模块运行,或者最好(在我看来)在您的setup.py中设置entry point。
也无法记住是否有必要,但您可能在app
子目录中缺少__init__.py。