【发布时间】:2019-04-04 18:58:12
【问题描述】:
我创建了一个包含子文件夹的包,我希望包含来自子包模块的父模块。
我已尝试遵循此处建议的项目结构 https://docs.python-guide.org/writing/structure/ 并尝试复制此处列出的分步过程 http://zetcode.com/lang/python/packages/ 但似乎我缺少有关 python 包系统的一些明显内容
这是我的项目结构
watches/
-- ...
-- watches/
---- __init__.py (empty)
---- Logger.py
---- main.py
---- db/
------ __init__.py (empty)
------ EntryPoint.py
Logger.py 包含一个类:
class Logger:
...
我尝试从db/EntryPoint.py 导入 Logger.py 的类和方法,如下所示:
from watches.Logger import Logger
class EntryPoint:
...
然后,我想将main.py 中的所有内容总结如下:
from db.EntryPoint import EntryPoint
if __name__ == "__main__":
t = EntryPoint("local")
最后,当我尝试按照python3 main.py 执行main.py 时(所以你可以猜到我位于watches/watches 目录中),我得到以下错误堆栈跟踪:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from db.EntryPoint import EntryPoint
File "some/absolute/path/watches/watches/db/EntryPoint.py", line 4, in <module>
from watches.Logger import Logger
ModuleNotFoundError: No module named 'watches'
【问题讨论】:
-
from ..Logger import Logger. -
您不应该从包本身的内部执行模块。试试
python3 watches/main.py。或者,可能更好,将其作为模块执行:python3 -m watches.main.
标签: python python-3.x