【问题标题】:Python 3 module relative import errorPython 3模块相对导入错误
【发布时间】:2016-03-07 02:14:13
【问题描述】:

我在开发一个包含我实现的两个包的应用程序时遇到了相对导入的问题,一个用于功能,另一个用于 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书籍,但我没有找到任何解决方案。

提前谢谢你!

【问题讨论】:

  • 不应该是from .config import conf吗?
  • .. 如果我的信息对我有用
  • @wim 它抛出这个错误:SystemError: Parent module '' not loaded, cannot perform relative import
  • @RNar import 语句前的双点将您带​​到层次结构中的上一级

标签: python python-3.x python-import


【解决方案1】:

我找到了解决方案!

我在 functionality.py 文件中添加了错误导入语句的前导点:

from .config import conf

运行 main.py 文件时效果很好!
但是假设我解决了问题,因为现在导入不起作用,当我单独运行 functionality.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

我还必须提到,我清空了 config 包中存在的 __init__.py 文件,因此它不包含任何导入语句。

感谢大家的努力,如果我找到其他解决方案,我将编辑此答案。

【讨论】:

    【解决方案2】:

    据我了解,您尝试导入功能。功能,它会导入配置,但失败了。

    那是因为当您运行 main.py 时,在您的模块搜索路径中没有包含类似“config”的模块。检查一下:添加

    import sys
    print (sys.path)
    

    就在您导入功能之前。您的搜索路径中有根目录(main.py 所在的位置)和一些默认站点目录。

    参考本节:https://docs.python.org/3/tutorial/modules.html#intra-package-references

    正如那里所写,您必须使用相对导入(带前导点)或编写完整路径(在您的情况下为functionality.config)

    【讨论】:

    • 你说得对,我应该使用相对导入,这就是有效的,完整路径解决方案也有效。第二种解决方案引发另一个错误: ImportError: No module named 'functionality.config'; “功能”不是一个包
    • 是的,你不能直接使用带有本地导入的模块。
    • 另外,我应该指定这些错误发生在我单独运行 functionality.py 时;与 main.py 不同,即使导入功能包也能正常运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2012-07-14
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多