我在开发一个应用程序时遇到了相对导入的问题,该应用程序包含我实现的两个包,一个用于功能,另一个用于GUI。
以下是实际的应用程序"架构"布局:
main.py
functionality/
|__init__.py
|functionality.py
|config/
|__init__.py
|conf.py
gui/
|__init__.py
|gui.py
我在functionality.py
文件中导入了config
模块,并使用它没有任何问题。但是,当我将功能模块导入main.py
文件并运行它时,我会得到以下错误:
from config import conf
ImportError: No module named 'config'
我已经搜索了这个问题,并阅读了几本Python书籍,但没有找到任何解决方案。
提前谢谢!
据我所知,您尝试导入functionalty.functionality,它导入配置,但失败了。
这是因为当您运行main.py时,在模块搜索路径中没有任何模块包含类似"config"的内容。看看:添加
import sys
print (sys.path)
就在您导入功能之前。在您的搜索路径(main.py所在的位置)和一些默认的站点目录中有根目录。
请参阅本节:https://docs.python.org/3/tutorial/modules.html#intra-包参考
正如它在那里所写的,您必须使用相对导入(带前导点)或编写完整路径(在您的情况下为functionalty.config)
我找到了解决方案!
我在功能中添加了一个前导点错误的导入语句。py文件:
from .config import conf
当运行main.py文件时,它工作得很好
但假设我解决了这个问题,因为现在当我运行功能时导入不起作用。py单独一个解释器抛出相同的异常
Traceback (most recent call last):
File "/home/youssef/workspace/application/functionality/functionality.py", line 14, in <module>
from .config import conf
SystemError: Parent module '' not loaded, cannot perform relative import
我还必须提到,我清空了配置包中存在的__init__.py文件,因此它不包含任何导入语句。
我感谢大家的努力,如果我找到其他解决方案,我会编辑这个答案。