当我尝试导入自定义库时,如何在Visual Studio Code中修复pylint(导入错误)?

7
我正在开发Python3代码,导入了几个自定义库。这些库在文件结构中。当我在命令窗口运行代码时,导入这些库没有问题,但是当我在Visual Studio Code中打开文件时,pylint会给所有自定义库导入报错。
我已经对此问题进行了很多烦人的研究,发现很多人遇到了类似的问题。然而,我无法使列出的解决方案之一奏效,而且很多我甚至不理解。我尝试卸载和重新安装VScode、pylint和python扩展本身。我尝试过一些更改launch.json和settings.json的方法,但我以前从未处理过json文件,我所做的一切似乎都没有任何区别。我只安装了一个python环境。我尝试使用“File->Open Folder…”打开文件夹,而不是使用上下文窗口方法。代码使用sys.path.append,以便找到拥有库的正确目录,正如我所说,这在命令窗口中运行时运行良好。
我看到的另一个解决方案是添加一行代码:
init-hook='import sys; sys.path.append("/path/to/root")'

将以下内容添加到文件 ~/.pylintrc 中。我认为我已经这样做了,但它并没有解决我的问题。然而,对于这个文件是什么,如何找到它,或者它需要的确切路径,几乎没有解释。我只是在我的文件浏览器中搜索了“.pylintrc”,找到了一个名为“ .pylintrc”的文件,那就是我放置这行代码的地方。“根路径”是通过导航到包含所有子文件夹中的库的文件夹,然后复制/粘贴文件路径获得的。

下面是导入库的示例。这可以工作,但对于 pylint 或 VScode 来说不起作用。

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

"无法导入'appdata' pylint(import-error)"作为'import'的错误显示

如果我尝试进行调试,会收到以下消息:

"异常情况已发生:ImportError 找不到名为'appdata'的模块"

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


我已经编辑过了,包括尝试遵循这里提供的解决方案。但是它对我没有起作用。完全有可能是我误解了有限的说明,但它甚至不让我评论以请求澄清。 - the_pied_shadow
这可能会更有帮助:https://dev59.com/dVQJ5IYBdhLWcg3wZVD_ - philoez98
3个回答

2

首先有一些问题(因为我不能评论):

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

针对这个问题,有两种不同的解决方案(这两种解决方案与上述提到的问题有关):

解决方案 1:确保模块位于包含空文件 __init__.py 的文件夹中。如果您没有它,请创建 __init__.py 并将其放置在包含模块的文件夹中,使用 IDE,在您的情况下是 VSCode。这样可以确保 Python 搜索文件夹中的文件以查找与要导入的文件名称匹配的文件。

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

希望这有所帮助!如果您还有其他想要添加到此问题的内容,请进行评论或编辑问题。


非常感谢!我尝试了许多不同的方法来解决这个错误(真的花了太多时间,我应该使用另一个代码检查工具),但是您的第二种解决方案对我理解我的错误以及如何修复它非常有帮助。 - OffensiveBias

1

.pylintrc 文件是 Pylint 的配置文件。Pylint 文档说明如何查找 pylintrc 文件

问题在于,Pylint 不会执行你的代码,所以你对 sys.path 的自定义操作对 Pylint 是未知的。因此,你需要想办法告诉 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
很抱歉,@the_pied_shadow,我不知道Pylint的配置文件设置,无法提供帮助。但就VS Code而言,所有扩展只是代表您执行Pylint,所以除了传递一些内容(例如如果您使用环境变量定义文件覆盖PYTHONPATH),它并未直接参与其中。 - Brett Cannon

0

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

在我的情况下,我将.pylintrc文件添加到了项目的根目录,并配置了一个钩子,就像这里所注释的那样:https://dev59.com/AnI-5IYBdhLWcg3wW28L#3065082


实际上,我后来通过以下方式进行了更改:https://dev59.com/AnI-5IYBdhLWcg3wW28L#53908601 - camposer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接