【问题标题】:How do I fix pylint(import-error) in Visual Studio Code when I try to import custom libraries?当我尝试导入自定义库时,如何在 Visual Studio Code 中修复 pylint(import-error)?
【发布时间】:2019-11-03 08:26:06
【问题描述】:

我正在 python3 中编写导入多个自定义库的 Python 代码。这些库位于文件结构中。从命令窗口运行代码时导入这些库没有问题,但是当我在 Visual Studio Code 中打开文件时,pylint 给我所有自定义库导入的导入错误。

我对这个问题做了很多令人沮丧的研究,发现很多人都遇到过类似的问题。但是,我无法使列出的任何解决方案起作用,但是我对许多解决方案的理解还不够,甚至无法尝试。我试图卸载并重新安装 VScode、pylint 和 python 扩展本身。我已经尝试了一些与 launch.json 和 settings.json 混淆的事情,但我之前从未对 json 文件做过任何事情,而且我所做的任何事情似乎都没有任何区别。我只安装了一个 python 环境。我尝试使用“文件->打开文件夹...”打开文件夹,而不是使用上下文窗口方法。该代码使用 sys.path.append 以便可以找到包含该库的正确目录,正如我所说,从命令窗口运行时可以正常工作。

我看到的另一个解决方案是添加一行

init-hook='import sys; sys.path.append("/path/to/root")'

到文件 ~/.pylintrc。我认为我已经这样做了,但它并没有解决我的问题。然而,关于这个文件是什么,在哪里可以找到它,或者它需要什么路径几乎没有解释。我只是在我的文件资源管理器中搜索了“.pylintrc”,并找到了一个名为的文件,该文件就是我放置该行的位置。我通过导航到将所有库保存在子文件夹中的文件夹,然后复制/粘贴文件路径来获得“根路径”。

以下是如何导入库的示例。这行得通,只是就 pylint 或 VScode 而言。

#Custom libraries
sys.path.append(os.path.join( '../..', 'common', 'appdata'))
import appdata

“无法导入 'appdata' pylint(import-error)” 在“导入”时显示为错误

如果我尝试调试,我会收到消息

"发生异常:ImportError 没有名为“appdata”的模块”

感谢您提供的任何帮助。谢谢。

【问题讨论】:

标签: python visual-studio-code python-import importerror pylint


【解决方案1】:

.pylintrc 文件是 Pylint 的配置文件。皮林特documents how it finds a pylintrc file.

问题在于 Pylint 不执行您的代码,因此 Pylint 不知道您对 sys.path 的自定义操作。因此,您需要做的是弄清楚如何告诉 Pylint 将您在代码中的文件夹视为 sys.path 的一部分。一种方法是指定PYTHONPATH,另一种方法是在.pylintrc 文件中指定它。

P.S.:sys.path.append(os.path.join( '../..', 'common', 'appdata')) 应该是 sys.path.append(os.path.join( '..', '..', 'common', 'appdata'))。

【讨论】:

  • 好的,这正在为我澄清。将正确的路径添加到 .pylintrc 听起来像是解决方案,但似乎并没有解决问题。我会假设我做错了什么。在 .pylintrc 文件中,我添加了一行来尝试解决“import appdata”问题。这是 .pylintrc 文件内容现在的样子。 ``` [MASTER] init-hook='import sys; sys.path.append("C:\Users\pathToAppDataFolder")' optimize-ast=no ``` 第二行是我在其他地方找到的解决方案中唯一添加的内容。重新启动VScode,同样的问题。我搞砸了什么吗?感谢您的帮助!
  • @the_pied_shadow 不幸的是,我不知道 Pylint 的配置文件设置能够提供帮助。但就 VS Code 而言,所有扩展程序所做的只是代表您执行 Pylint,因此如果您使用 environment variable definitions file 覆盖它,它不会直接参与其中的任何事情,除了传递您的 PYTHONPATH 之类的东西。
【解决方案2】:

首先是一些问题(因为我无法评论):1.您是否使用了多个版本的python3(比如有一次我通过python3.8安装了一个包,但我使用的是python3.9,所以当我尝试导入它时我有一个modulenotfounderror,但后来我解决了)如果是这样,那么你安装了多少个版本 2.库的系统路径是什么(如果您不想共享路径,可以共享示例路径)? 3. 自定义库所在的文件夹中是否有__init__.py 文件(例如:module.py 的路径:C:users\random\documents\modulecontainer\module.py __init__.py 应该如果 module.py 是您的自定义模块,则在 modulecontainer 中)?

根据您的问题,此问题有 2 种不同的解决方案(这 2 个解决方案与上述问题相关联):

解决方案 1:确保模块位于包含名为 __init__.py 的空文件的文件夹中,如果没有,则创建 __init__.py 并将其放置在包含模块的文件夹中一个IDE,在你的情况下是VScode。这可确保 Python 搜索文件夹内的文件以找到与您要导入的文件的名称匹配的文件。

解决方案 2:如果您通过不同版本的 python 安装了不在标准库中的模块,该版本不是您当前使用的 python 版本(例如,通过 python3.8 安装 randommodule 但尝试导入它通过python3.9)然后您可以复制或移动其他版本的python中的包(例如,将randommodule从python38中的站点包移动到python39中的站点包)

希望,这有帮助!如果您有任何其他要添加到此问题的内容,可以评论或编辑该问题。

【讨论】:

    【解决方案3】:

    实际上,正如@Brett 上面建议的那样,最好的方法是使用 .pylintrc 文件。

    在我的例子中,我将 .pylintrc 文件添加到我的项目的根目录中,并配置了一个钩子,如下所示:https://stackoverflow.com/a/3065082

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多