尝试导入自定义库时,如何在Visual Studio Code中修复pylint(import-error)?

时间:2019-06-20 13:40:12

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

我正在处理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”,然后找到了一个刚好位于该行中的文件。通过导航到将所有库保存在子文件夹中的文件夹,然后复制/粘贴文件路径,获得了“ root路径”。

以下是如何导入库的示例。这行得通,只是不涉及pylint或VScode。

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

“无法导入'appdata'pylint(导入错误)” 显示为“导入”错误

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

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

我感谢能提供的任何帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

.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'))

答案 1 :(得分:0)

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

此问题有 2 种不同的解决方案,具体取决于您的问题是什么(这 2 种解决方案与上述问题相关联):

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

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

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

答案 2 :(得分:0)

实际上最好的方法是使用 .pylintrc 文件。

在我的例子中,我将 .pylintrc 文件添加到我的项目的根目录中,并配置了一个钩子,如这里评论的那样:https://stackoverflow.com/a/3065082