首页 > 解决方案 > 如何修复 Pylint 的误报无法导入错误?

问题描述

在过去的几个小时里,我试图弄清楚从父目录和子目录导入模块的 Pythonic 方式是什么。我做了一个项目只是为了测试目的并将它托管在github 上,所以你可以看看它以更好地理解我的问题。在项目中,我们有以下文件结构:

├── __init__.py
├── main.py
└── project
    ├── a.py
    ├── __init__.py
    └── subdirectory
        ├── b.py
        └── __init__.py

我试图弄清楚如何从子目录和父目录导入模块。
如果我尝试在导入语句中不指定根目录名称的情况下将模块导入模块,那么pylint./project/subdirectories/b.py开始抱怨它无法找到模块,但程序运行正常: 如果我在导入中指定了根目录声明然后pylint停止抱怨,但程序不再运行:有人可以向我解释为什么当程序运行时我会从pylint 得到那些误报,如果我做了pylint./project/a.pymain.py在此处输入图像描述在此处输入图像描述
高兴,通过在import语句中指定根目录,那么程序就停止工作了?

标签: pythonmodulepython-importpylint

解决方案


您的 IDE(以及因此 pylint)希望代码从 git 存储库的根目录启动,而不是从它上面的目录启动。您的 git 项目结构中没有test目录。所以我认为导入from test.project import a工作只是因为你的 git 存储库本身被命名test并且因为你从项目目录上方启动程序。即你的真实结构是这样的:

    test
    ├── .git # root of git repository inside test
    ├── __init__.py
    ├── main.py
    └── project
        ├── a.py
        ├── __init__.py
        └── subdirectory
            ├── b.py
            └── __init__.py

但是测试目录不在 git 中,对于 IDE,git 根目录作为源根目录。如果您__main__从启动 pylint 的同一目录开始启动,则 pylint 指示将是准确的。所以解决方法是在你的 git 项目中创建测试目录:

    .git # root of git repository outside test/
    test
    ├── __init__.py
    ├── main.py
    └── project
        ├── a.py
        ├── __init__.py
        └── subdirectory
            ├── b.py
            └── __init__.py

您还可以通过更改 IDE 的根目录从启动代码的同一目录启动 pylint。


推荐阅读