关于python:Visual Studio Code中的pyintint“无法解析的导入”错误

Pylint “unresolved import” error in Visual Studio Code

我正在使用以下设置

  • macOS v10.14(Mojave)
  • 的Python 3.7.1
  • Visual Studio代码1.30
  • 皮林特2.2.2
  • Django 2.1.4

我想使用棉绒使我的生活在Visual Studio Code中更加轻松。但是,对于每个导入,我都有"未解决的导入"状态。即使是默认的Django导入(即从django.db导入模型)。

我认为这是因为它没有看到虚拟环境Python文件。

一切正常,但开始变得烦人。

我拥有的解释器选择都是Python的所有系统版本。似乎根本看不到我的虚拟环境Python(它与我的工作空间不在同一个目录中,所以这很有意义)。

如果我在settings.json文件中设置了python.PythonPath,它只会忽略它,而不会列出我的虚拟环境路径作为选项。我也尝试在全局Python设置中进行设置,但它也没有显示。

有快速解决方案可以使其正常工作吗?


导入自己的模块时,可接受的答案无法解决错误。

在工作空间设置.vscode/settings.json中使用以下设置:

1
"python.autoComplete.extraPaths": ["./path-to-your-code"],

参考:故障排除,未解决的导入警告


在工作区设置中,可以这样设置Python路径:

1
2
3
{
   "python.pythonPath":"/path/to/your/venv/bin/python",
}


另一种方法:使用命令界面!

Cmd / Ctrl + Shift + P→Python:选择解释器→选择包含您要查找的软件包的软件包:

Enter image description here


该问题已在GitHub上公开:

Python未解决的导入问题#3840

MagnuesBrzenk和Spe??nHouet有两个非常有用的答案。

目前最好的解决方案是在项目根文件夹中创建一个.env文件。然后像这样添加一个PYTHONPATH:

1
PYTHONPATH=YOUR/MODULES/PATH

并在您的settings.json中添加:

1
"python.envFile":".env"


如果您的settings.json文件中包含此代码,请将其删除:

1
2
3
{
   "python.jediEnabled": false
}


我可以通过在.vscode \ settings.json中启用jedi来解决此问题

1
"python.jediEnabled": true

来自https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-456017675的参考


如果您像我一样更直观,则可以在菜单文件→首选项→设置(Ctrl + )中使用Visual Studio Code配置。转到扩展→Python。

在"分析:已禁用"部分中,添加以下消息的禁止显示:unresolved-import

Visual Studio Code settings


当我做> reload window修复它。

参考:Python未解决的导入问题#3840,dkavraal的评论


您需要选择与虚拟环境关联的解释器。

Enter image description here

单击此处(底部状态栏):

Enter image description here

只需选择您正在使用的虚拟环境。做完了

有时,即使选择了口译员,它也不起作用。只需再次重复该过程即可解决。

Enter image description here


除了这一解决方案,其他解决方案均无效。在settings.json中替换" Pylance"或" Microsoft"解决了我的问题。

1
"python.languageServer":"Jedi"

我想知道这个问题有(或没有)多少解决方案,我尝试了以上大多数方法,没有任何效果,唯一有效的解决方案是将python语言服务器设置为Jedi,而不是settings.json文件中的Microsoft:

1
"python.languageServer":"Jedi"

我的解决方案

此解决方案仅适用于当前项目。

  • 在项目根目录中,创建文件夹.vscode

  • 然后创建文件.vscode/settings.json

  • 在文件setting.json中,添加该行(这适用于Python3)

    1
    2
    3
    {
       "python.pythonPath":"/usr/local/bin/python3",
    }
  • 这是Python2的示例

    1
    2
    3
    {
       "python.pythonPath":"/usr/local/bin/python",
    }
  • 如果您不知道Python安装的位置,只需在终端上运行命令which pythonwhich python3。它将打印Python位置。

  • 本示例适用于dockerized Python-Django。


  • 对我来说,问题与我正在从事的项目有关。我花了一些时间才弄清楚,因此希望对您有所帮助:

    原始文件夹结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        root/
        __init__.py  # Empty

            folder/
                __init__.py # Empty

                sub_folder_b/
                    my_code.py
                sub_folder_c/
                    another_code.py

    在another_code.py中:

    1
    from folder.sub_folder_b import my_code.py

    这没有触发Visual Studio Code中的智能感知,但确实执行了OK。

    另一方面,在导入路径上添加" root"确实可以实现智能感知,但是在执行时引发了ModuleNotFoundError:

    1
    from root.folder.sub_folder_b import my_code.py

    解决方案是删除"文件夹"目录中的_init_.py文件,仅保留/root上的_init_.py。


    以前的答案都没有对我有用。但是,将以下两行添加到我的settings.json文件中。

    1
    2
    3
    4
    "python.analysis.disabled": [
       "unresolved-import"
    ],
    "python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]

    第一行实际上只是隐藏了掉毛错误。当然不是永久性的解决方案,但会使屏幕杂乱无章。

    这个答案给了我第二行:带有ProtoBuf编译的Python结构的VS Code PyLint错误E0602(未定义的变量)

    也许比我更了解Python的人可以再解释一遍。


    Shinebayar G的解决方案有效,但另一个解决方案则更为优雅:

    从Python未解决的导入问题#3840复制:

    给定以下示例项目结构:

    • workspaceRootFolder

      • .vscode
    • ...其他文件夹
    • codeFolder

    我为解决此问题所做的工作:

  • 进入工作区文件夹(此处为workspaceRootFolder)并创建一个.env文件
  • 在此空的.env文件中,添加PYTHONPATH = codeFolder行(用您的文件夹名称替换codeFolder)
  • 将" python.envFile":" $ {workspaceFolder} /。env"添加到settings.json
  • 重新启动Visual Studio代码

  • 这对我有用:

    打开命令面板(Ctrl + Shift + P),然后选择" Python:选择解释器"。

    为此,您可以在Visual Studio Code中设置Python解释器。


    改变中
    Python:语言服务器
    "杰迪"为我工作。
    最初是" Windows"。


    发生这种情况是因为Visual Studio Code将当前文件夹视为主文件夹,而不是考虑实际的主文件夹。

    修复的快速方法是它提供主文件夹的解释器路径。

    Command + Shift + P(或在大多数其他系统上,按Ctrl + Shift + P)。

    类型Python解释器

    从可用选项中选择安装Python的路径。


    我有一个不同的解决方案:我的Visual Studio Code实例选择了存储在.venv中的virtualenv,但是它使用了错误的Python二进制文件。它正在使用.venv/bin/python3.7;使用蓝色状态栏中的切换台。

    我将其更改为使用.venv/bin/python,并且所有导入均已正确解决。

    我不知道在执行此操作时Visual Studio Code在后台执行的操作,也不知道为什么这导致了我的问题,但是对我来说,这是比编辑工作区设置稍微更简单的解决方案。


    如果出现Pylint错误,请安装以下内容

    1
    pipenv install pylint-django

    然后在根文件夹中创建一个文件.pylintrc,并编写以下内容

    1
    load-plugins=pylint-django

    我已经通过Ctrl + Shift + P解决了导入错误。
    键入"首选项设置",然后选择选项"首选项打开设置(JSON)"

    并添加行"python.pythonPath":"/usr/bin/"

    因此,JSON内容应类似于:

    1
    2
    3
    {
       "python.pythonPath":"/usr/bin/"
    }

    保留其他配置行(如果存在)。
    这应该导入您使用PIP安装的所有模块以实现自动完成。


    就我而言,我已经激活了Conda环境,但是我仍然希望本地Python模块可用于自动完成,偷看定义等。

    我尝试了许多解决方案,例如添加Python路径列表等,但最终为我解决的是创建从Conda lib/python{your version}/site-packages到本地模块的符号链接。


    对我来说,如果我将python,pylint和autopep8的路径设置为本地环境路径,它就可以工作。

    为您的工作区添加/更改此:

    1
    2
    3
    "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。
    做完了!


    我有一个库,尝试使用Jedi语言服务将其包含进来时会出错,并且在没有它的情况下也可以正常工作(即C#)。

    该库是jsonslicer,它确实取决于我安装到/usr/local/lib中的外部C库。可能与这有关吗?

    我在Conda环境中安装了Jedi服务和库,并在VisualStudio中使用了该环境。它在运行时和终端上都可以正常运行,但在检查源文件中的问题时却无法正常工作,并且显示为错误。


    首先,请确保您已安装插件,但可能是工作区目录设置不正确。只需检查Pylint并编辑基础的settings.json文件。

    1
    2
    3
    4
    {
       "python.pythonPath":"/usr/local/bin/python3",
       "git.ignoreLimitWarning": true
    }


    安装代码运行器,并将以下代码添加到settings.json文件夹中:

    1
    2
    3
       "code-runner.executorMap": {
           "python":"python3 -u",
        }

    " python":"(带有模块或其路径的Python可执行文件-u",


    我已经通过三种方式面对了这个问题。尽管对于每个问题,答案中都可以找到解决方案,但我只是想将它们放在一起。

  • 首先,在导入某些模块时出现了"未解决的导入",我注意到我的安装是在全局点而不是虚拟环境中进行的。

    这个问题是由于Python解释器。您需要使用Shift + Ctrl + P在Visual Studio Code中选择解释器,然后键入Select Python Interpreter。在这里选择您的venv口译员。

  • 第二个问题是:上述更改没有完全解决我的问题。这次是因为文件settings.json。如果您的项目目录中没有settings.json文件,请创建一个文件并在其中添加以下行:

    1
    2
    3
        {
           "python.pythonPath":"apis/bin/python"
        }

    基本上,这将告诉Visual Studio Code使用venv中的Python解释器。

  • 第三个问题是在另一个程序中导入自定义Python模块或文件时。为此,您需要了解文件夹结构。由于venv中的Python位于bin中,因此您需要指定模块的文件夹(大多数情况下是应用程序文件夹)。在我的情况下是app

    1
        from app.models import setup_db

    严格来说,从models.py导入setup_db驻留在app文件夹中。


  • 如果使用的是pipenv,则需要在settings.json文件中指定虚拟环境的路径。
    例如 :

    1
    2
    3
    4
    {
       "python.pythonPath":
              "/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
    }

    这会有所帮助。


    我在使用venv,vscode 1.48.2的python 3.8.5中遇到相同的问题
    我找到了解决方案。
    在(环境文件夹)/ lib / site-packages中不包含软件包。
    我使用此设置(.vscode / settings.json)

    1
    2
    3
    4
    5
    6
    7
       {
           "python.autoComplete.extraPaths": [
               "./**",
            ],
           "python.pythonPath":"env\\\\Scripts\\\\python.exe",
           "python.languageServer":"Microsoft"
       }

    如果有人碰巧和我一样谐趣,那么以下方法就可以了。

    旧文件夹结构:

    1
    2
    3
    4
    5
    6
    awesome_code.py
    __init__.py
        src/
            __init__.py
            stuff1.py
            stuff2.py

    新结构:

    1
    2
    3
    4
    5
    awesome_code.py
        src/
            __init__.py
            stuff1.py
            stuff2.py

    我的解决方案是在以前的目录中打开Visual Studio Code。


    我用命令行python解决了这个问题。
    我在项目路径中使用vs代码终端安装了模块,但是在Windows命令行python上导入模块时,由于未定义此模块,因此会引发错误
    所以我从命令行安装了这些模块,问题解决了。