我已经创建了一个包含子文件夹的软件包,并且我希望包括子软件包模块中的父模块。
我尝试遵循此处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")
最后,当我尝试按照main.py
的方式执行python3 main.py
时(如您所知,我位于watches/watches
目录中),我猜到了以下错误堆栈跟踪: / p>
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'
答案 0 :(得分:0)
每次导入都相对于脚本运行的位置(在您的情况下为main.py)。
因此,程序的观点是:
-logger.py
-__init__.py
-db/
---__init__.pt
---EntryPoint.py
程序不知道他是一个名为watchs的模块,因此,如果要在主程序中导入logger.py,只需执行以下操作:
from Logger import Logger
或将主目录移动到父文件夹。