问题描述
我有一个奇怪的错误,当我尝试从子文件夹内的文件导入一个类时,我得到一个 ModuleNotFoundError
:
from petri.strategyport.strategy import Strategy
ModuleNotFoundError: No module named 'petri.strategyport'
strategyport
文件夹不包含 __init__.py
,我使用的是 python 3.8。此外,petri
模块在其他上下文中工作(当我收到错误时,我试图从 NixOS shell 运行它)。 sys.path
包含 petri
模块的根文件夹。谁能给我一个关于这里可能出现什么问题的线索?看起来很神秘。
在此先感谢您的帮助,也感谢活动结束后的帮助。
编辑:这里的文件结构如下:
petri/
__init__.py
/strategyport/
strategy.py
其中 __init__.py
有 from petri.strategyport.strategy import Strategy
进一步编辑:
在这个包中实际上还有许多其他的导入,例如from petri.asset import Asset
,等等。所有单级(即,它们在根目录级别,而不是在它们自己的子文件夹中)都有效,而多级都不起作用。因此,python 将子文件夹误认为模块似乎存在一些基本问题。将导入语法从 from petri.xxxx.yyyy import zzzz
切换到 from xxxx.yyyy import zzzz
没有任何区别。
解决方法
你应该写from strategyport.strategy import Strategy
改变
from petri.strategyport.strategy import Strategy
到
from strategyport.strategy import Strategy
不需要包含 petri
目录。因为您的 __init__.py
脚本已经在该目录中。所以你只需要写 strategyport.strategy
就足够了。
或
您可以将petri
的父目录添加到path
。
import sys
sys.path.insert(1,'/path/to/parent/of/petri/')
from petri.strategyport.strategy import Strategy