Visual Studio Code 中的 Pylint“未解析的导入”错误
- 2025-01-10 08:47:00
- admin 原创
- 115
问题描述:
我正在使用以下设置
macOS v10.14(莫哈韦)
Python 3.7.1
Visual Studio Code 1.30
Pylint 2.2.2
Django 2.1.4
我想使用 linting 来让我在 Visual Studio Code 中的生活更轻松一些。但是,对于我所做的每个导入,都显示“未解析的导入”。即使是默认的 Django 导入(即从 django.db 导入模型)。
我推测这是因为它没有看到虚拟环境 Python 文件。
一切都运行良好,但它开始变得烦人了。
我所选择的解释器都是 Python 的系统版本。它似乎根本看不到我的虚拟环境 Python(它与我的工作区不在同一目录中,所以这一点是有道理的)。
如果我在settings.json文件中设置了python.PythonPath,它会忽略它,并且不会将我的虚拟环境路径列为选项。我也尝试在我的全局 Python 设置中设置它,但它也没有显示。
有没有什么快速解决办法可以使它正常工作?
解决方案 1:
接受的答案不会修复导入自己的模块时出现的错误。
在您的工作区设置中使用以下设置.vscode/settings.json
:
"python.autoComplete.extraPaths": ["./path-to-your-code"],
参考:故障排除,未解决的导入警告
2023 年更新
正如shmim所提到的,python-language-server 已被弃用,新的闭源 LSP Pylance 的设置配置如下:
"python.analysis.extraPaths": ["./path-to-your-code"]
解决方案 2:
在你的工作区设置中,你可以像这样设置你的 Python 路径:
{
"python.defaultInterpreterPath": "/path/to/your/venv/bin/python",
}
解决方案 3:
替代方法:使用命令界面!
Cmd
/ Ctrl
++ → Python:选择解释器Shift
→选择带有您要查找的包的解释器:P
解决方案 4:
此问题已在 GitHub 上提出:
Python 未解决的导入问题 #3840
MagnuesBrzenk 和 SpenHouet 给出了两个非常有用的答案。
目前最好的解决方案是在项目根文件夹中创建一个 .env 文件。然后向其中添加 PYTHONPATH,如下所示:
PYTHONPATH=YOUR/MODULES/PATH
并在您的 settings.json 中添加:
"python.envFile": ".env"
解决方案 5:
当我> reload window
这样做时,问题就解决了。
参考:Python 未解决的导入问题 #3840,dkavraal的评论
解决方案 6:
您需要选择与虚拟环境相关的解释器。
单击此处(底部状态栏):
只需选择您正在使用的虚拟环境即可。完成。
有时,即使选择了解释器,它也不会起作用。只需重复该过程即可解决问题。
解决方案 7:
除了这个之外,其他解决方案都不起作用。在 settings.json 中替换“Pylance”或“Microsoft”解决了我的问题。
"python.languageServer": "Jedi"
解决方案 8:
如果您的settings.json
文件中存在此代码,请将其删除:
{
"python.jediEnabled": false
}
解决方案 9:
我可以通过在 .vscode\settings.json 中启用 jedi 来解决这个问题
"python.jediEnabled": true
参考自https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-456017675
解决方案 10:
如果你和我一样更注重视觉效果,则可以使用菜单文件→首选项→设置( Ctrl
+ )中的 Visual Studio Code 配置,
。转到扩展→ Python。
在“分析:已禁用”部分中,添加对以下消息的抑制unresolved-import
::
解决方案 11:
我想知道这个问题有多少种解决方案(或者没有),我尝试了上述大多数方法,但都没有用,唯一有效的解决方案是在 settings.json 文件中将 python 语言服务器设置为 Jedi,而不是 Microsoft:
"python.languageServer": "Jedi"
解决方案 12:
好吧,两年后,我又遇到了这个烦人的问题。我在这里看到的都是一些非常复杂的解决方法。以下是一些易于遵循的步骤,供以后可能遇到此问题的人参考:
在 VS Code 底部,你会看到列出的 Python 版本,只需点击那里
将出现选择解释器窗口
单击第一个选项“选择解释器路径”,然后导航到包含虚拟环境的文件夹路径
这就是您需要做的全部工作,避免篡改 VS Code 中的那些设置,如果不小心处理,可能会变得非常复杂。
解决方案 13:
前面的答案对我都不起作用。不过,将下面的两行添加到我的settings.json文件中却起了作用。
"python.analysis.disabled": [
"unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]
第一行实际上只是隐藏了 linting 错误。这当然不是永久的解决方案,但可以简化屏幕。
这个答案给了我第二行:VS Code PyLint Error E0602(未定义变量)与ProtoBuf编译的Python结构
也许有人比我更了解 Python 可以进一步解释这一点。
解决方案 14:
我的解决方案
此解决方案仅适用于当前项目。
在项目根目录中创建文件夹
.vscode
然后创建文件
.vscode/settings.json
在文件中
setting.json
,添加以下行(适用于 Python 3)
{
"python.pythonPath": "/usr/local/bin/python3",
}
这是 Python 2 的示例
{
"python.pythonPath": "/usr/local/bin/python",
}
如果你不知道 Python 安装在哪里,只需在终端上运行命令
which python
或which python3
。它将打印 Python 位置。此示例适用于dockerized Python - Django。
解决方案 15:
我在导入与项目相关的(非标准)模块时遇到了同样的问题。问题的详细解释
目录结构:
Project_dir:
.vscode/settings.json
dir_1
> a
> b
> c
dir_2
> x
> y
> z
我们想要的是:
Project_dir
dir_3
import a
import y
这里“ import a ”和“ import y ”失败并出现以下错误:
Import "dir_1.a" could not be resolvedPylancereportMissingImports
Import "dir_2.y" could not be resolvedPylancereportMissingImports
对我有用的是:
附加包含要导入的模块的顶级目录。
在上面的示例中,在“.vscode/settings.json”中添加以下内容“要附加的代码”
文件名:
.vscode/settings.json
附加代码:
"python.analysis.extraPaths": [dir_1, dir_2]
解决方案 16:
Shinebayar G 的解决方案有效,但是另一个解决方案更优雅一些:
从Python 未解决的导入问题 #3840复制:
给出以下示例项目结构:
工作区根文件夹
.vscode
... 其他文件夹
代码文件夹
我为解决这个问题做了什么:
进入工作区文件夹(此处为workspaceRootFolder)并创建一个.env 文件
在这个空的 .env 文件中,添加行 PYTHONPATH=codeFolder (将 codeFolder 替换为您的文件夹名称)
将“python.envFile”:“${workspaceFolder}/.env”添加到settings.json
重新启动 Visual Studio Code
解决方案 17:
对我来说,这个问题与我正在从事的项目有关。我花了一段时间才弄清楚,所以我希望这能有所帮助:
原始文件夹结构:
root/
__init__.py # Empty
folder/
__init__.py # Empty
sub_folder_b/
my_code.py
sub_folder_c/
another_code.py
在another_code.py中:
from folder.sub_folder_b import my_code.py
这并没有触发 Visual Studio Code 中的智能感知,但它确实执行正常。
另一方面,在导入路径上添加“root”确实使智能感知起作用,但在执行时引发了ModuleNotFoundError:
from root.folder.sub_folder_b import my_code.py
解决方案是删除“文件夹”目录内的_ init .py 文件,只留下位于 的 init/root
_.py 。
解决方案 18:
这对我有用:
打开命令面板(Ctrl
++ Shift
)P
并选择“Python:选择解释器”。
这样做,您可以在 Visual Studio Code 中设置 Python 解释器。
解决方案 19:
将 Python:语言服务器更改为“Jedi”对我来说很有效。最初是“Windows”。
解决方案 20:
这里的所有答案都无法为我解决此错误。代码可以运行,但我无法直接跳转到函数定义。它仅适用于某些本地包。首先,python.jediEnabled
不再是一个有效的选项。我做了两件事,但我不确定第一件事是否必要:
下载 Pylance 扩展,更改
python.languageServer
为“Pylance”添加
"python.analysis.extraPaths": [ "path_to/src_file" ]
显然,根目录和src
将检查本地包,但必须在这里添加其他包。
解决方案 21:
我正在使用以下设置:(2021 年 4 月)
macos big sur
vscode
Anaconda 3(用于环境)
我在启动 Django 时遇到了这个错误。因此,我按照以下步骤操作,此错误已解决。
这些屏幕截图给出了步骤:
打开设置(工作区)
按照此截图打开Python路径
现在,点击
Edit in settings.json
制作如本屏幕截图所示的路径
/opt/anaconda3/bin/python
5.现在,保存此settings.json文件。6.重新启动vscode
此外,智能感知可能在一段时间内不起作用,请等待一段时间,然后重新启动,然后 vscode 读取文件以获取新路径。
解决方案 22:
发生这种情况的原因是 Visual Studio Code 将当前文件夹视为主文件夹,而不是考虑实际的主文件夹。
修复的快速方法是提供主文件夹的解释器路径。
按Command
+ Shift
+ P
(或在大多数其他系统上按Ctrl
+ Shift
+ P
)。
类型Python 解释器
从可用选项中选择安装 Python 的路径。
解决方案 23:
对于我来说,如果我将 python、pylint 和 autopep8 的路径设置到本地环境路径,它就会起作用。
对于您的工作区,添加/更改此项:
"python.pythonPath": "...\\your_path\\.venv\\Scripts\\python.exe",
"python.linting.pylintPath": "...\\your_path\\.venv\\Scripts\\pylint.exe",
"python.formatting.autopep8Path": "...\\your_path\\.venv\\Scripts\\autopep8.exe",
保存并使用工作区重新启动 VS Code。完成!
解决方案 24:
我有一个不同的解决方案:我的 Visual Studio Code 实例已获取存储在中的虚拟环境.venv
,但它使用了错误的 Python 二进制文件。它正在使用.venv/bin/python3.7
;使用蓝色状态栏中的切换器。
我将其改为使用.venv/bin/python
,并且我的所有导入都得到了正确解决。
当我这样做时,我不知道 Visual Studio Code 在幕后做什么,也不明白为什么这会导致我的问题,但对我来说,这是一个比编辑工作区设置稍微简单一些的解决方案。
解决方案 25:
如果出现 Pylint 错误,请安装以下内容
pipenv install pylint-django
然后在根文件夹中创建一个文件.pylintrc并写入以下内容
load-plugins=pylint-django
解决方案 26:
我曾以三种方式遇到过这个问题。尽管每种方式都可以在这个问题的答案中找到解决方案,但我只是想把它们放在一起。
首先,我在导入一些模块时收到“未解决的导入”信息,我注意到我的安装发生在全局 pip 中,而不是虚拟环境中。
此问题是由于 Python 解释器引起的。您需要在 Visual Studio Code 中使用Shift
+ Ctrl
+选择解释器P
,然后键入Select Python Interpreter
。在此处选择您的venv解释器。
第二个问题是:上述更改没有完全解决我的问题。这次是因为文件settings.json。如果您的项目目录中没有settings.json文件,请创建一个并在其中添加以下行:
{
"python.pythonPath": "apis/bin/python"
}
这基本上会告诉 Visual Studio Code 使用 venv 中的 Python 解释器。
第三个问题是在另一个程序中导入自定义 Python 模块或文件时出现的。为此,您需要了解文件夹结构。由于 venv 中的 Python 位于 bin 内,因此您需要指定模块的文件夹(大多数情况下是应用程序文件夹)。在我的情况下是
app
,
from app.models import setup_db
口头上,从 models.py 导入 setup_db 位于app文件夹中。
解决方案 27:
如果您正在使用pipenv
,则需要指定虚拟环境.insettings.json
文件的路径。例如:
{
"python.pythonPath":
"/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
}
这会有所帮助。
解决方案 28:
我在使用 venv、vscode 1.48.2 的 python 3.8.5 中遇到了同样的问题,我找到了解决方案。在 (env 文件夹)/lib/site-packages 中不包含包。我使用此设置 (.vscode/settings.json)
{
"python.autoComplete.extraPaths": [
"./**",
],
"python.pythonPath": "env\\Scripts\\python.exe",
"python.languageServer": "Microsoft"
}
解决方案 29:
如果有人碰巧和我一样愚蠢,那么以下方法就有效了。
旧文件夹结构:
awesome_code.py
__init__.py
src/
__init__.py
stuff1.py
stuff2.py
新结构:
awesome_code.py
src/
__init__.py
stuff1.py
stuff2.py
解决方案 30:
如果导入子目录中的模块,请在 .vscode/settings.json 中添加以下设置:
"python.analysis.extraPaths": [
"./directory_name"
]