我创建了一个包含子文件夹的包,我想从子包模块中包含一个父模块。
我试图遵循这里建议的项目结构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
目录,你可以猜到),我guet以下错误堆栈跟踪:
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'
每个导入都是相对于运行脚本的位置,在您的情况下是main.py.
因此,您的计划的观点是:
-logger.py
-__init__.py
-db/
---__init__.pt
---EntryPoint.py
程序不知道他是一个名为watches的模块,所以如果你想在你的main中导入logger.py,只需执行:
from Logger import Logger
或者将您的主页移动到父文件夹。