Skip to main content
 首页 » 编程设计

python之从父目录导入失败,出现 ImportError

2025年05月04日6zfyouxi

我正忙着用python开发一个应用程序,我的应用程序结构如下

main.py 
pr/ 
    core/ 
        __init__.py 
        predictor.py 
    gui/ 
        predictor/ 
            __init__.py 
            predict_panel.py 
        __init__.py 
        pr_app.py 
    __init__.py 

我使用 main.py 启动应用程序

在 pr_app.py 里面

class PrApp(wx.App): 
    PREDICTOR = Predictor() 

在 predict_panel.py 中我可以成功地做

从 pr.core.predictor 导入预测器

但由于某些原因我做不到

从 pr.gui.pr_app 导入 PrApp

我得到了礼物

ImportError: 无法导入名称 PrApp

在 python 中从父目录导入时是否存在某种问题,或者我是否遗漏了什么?

请您参考如下方法:

我试过这个并做了一棵像你的树,但在 pr 目录中添加了一个 __init__.py。没有那个 __init__.py 你的 from pr.core.predictor import Predictor 应该会失败,所以我想你有它,但忘了把它写在你的问题中。

我没能得到你做的失败,它对我来说很好。正如我预期的那样,我可以从 predict_panel.py 进行两个导入。

但是,如果我从 pr_app.py 导入 predict_panel,那么从 predict_panel.py 导入 PrApp 会失败。这是因为我有一个循环导入。您尝试在导入 PrApp 期间从 PrApp 导入 predict_panel 并尝试在导入期间导入 PrApp 预测面板。这会造成导入的无限递归,因此是不允许的。

解决此问题的最佳方法是重新组织您的代码,这样您就不必进行循环导入。如果 PrApp 导入 predict_panel,为什么 predict_panel 需要 PrApp?这是设计有缺陷的迹象。

但是,修复它的最快方法是将其中一个导入从模块顶部移动到调用它的函数/方法中。这是不好的做法,但它会很快解决您的问题。