【问题标题】:How to fix Pylint's false positive Unable to import error?如何修复 Pylint 的误报无法导入错误?
【发布时间】:2021-03-27 11:31:21
【问题描述】:

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

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

我试图弄清楚如何从子目录和父目录导入模块。
如果我尝试将模块 ./project/subdirectories/b.py 和 ./project/a.py 导入到 main.py 模块中而不在导入语句中指定根目录的名称,那么 pylint 开始抱怨它无法找到模块,但程序运行良好: 如果我在 import 语句中指定了根目录,那么 pylint 将停止抱怨,但程序不再运行:
请有人可以通过在import 语句,然后程序停止工作?

【问题讨论】:

  • 对我来说听起来像是 Pylint 中的一个错误。您可以在 GitHub 上打开一个错误,同时使用 pylint 在模块的顶行写下此消息来禁用此消息:# pylint: disable=import-error
  • 我在reddit.com/r/learnpython 上问了同样的问题,并被告知要从根目录中删除__init__.py 文件。我删除了它,pylint 开始正常工作。我可能会留下这个问题,直到有人给出关于为什么 __init__.py 在根目录中是多余的全面答案。

标签: python module python-import pylint


【解决方案1】:

您的 IDE(以及 pylint)期望代码从您的 git 存储库的根目录启动,而不是从它上面的目录启动。您的 git 项目结构中没有 test 目录。所以我认为 import 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 根目录作为源根目录。如果您从启动 pylint 的同一目录开始启动 __main__,则 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。

【讨论】:

猜你喜欢
  • 2020-10-13
  • 2021-01-18
  • 1970-01-01
  • 2010-12-26
  • 2019-11-09
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多