python中__init__导入失败_python - 如何使用__init__.py修复“在非包中尝试相对导入”...

当在Python中遇到'在非包中尝试相对导入'的错误时,问题通常在于没有正确使用__init__.py文件。解决方案包括使用python -m选项执行脚本,调整sys.path,或者在脚本中设置__package__属性。确保在需要作为包导入的目录下包含__init__.py。
摘要由CSDN通过智能技术生成

python - 如何使用__init__.py修复“在非包中尝试相对导入”

我正在尝试遵循PEP 328,具有以下目录结构:

pkg/

__init__.py

components/

core.py

__init__.py

tests/

core_test.py

__init__.py

在core_test.py我有以下import语句

from ..components.core import GameLoopEvents

但是,当我运行时,我收到以下错误:

tests$ python core_test.py

Traceback (most recent call last):

File "core_test.py", line 3, in

from ..components.core import GameLoopEvents

ValueError: Attempted relative import in non-package

在我周围搜索时发现“相对路径甚至无法使用__init__.py”和“从相对路径导入模块”,但它们没有帮助。

这里有什么我想念的吗?

12个解决方案

561 votes

详细阐述Ignacio Vazquez-Abrams的答案:

Python导入机制相对于当前文件的-m工作。 直接执行文件时,它没有通常的名称,而是以__package__作为其名称。 所以相对进口不起作用。

正如Igancio建议的那样,您可以使用-m选项执行它。 如果您的程序包的一部分要作为脚本运行&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值