Помилка "невирішеного імпорту" Pylint у коді Visual Studio


138

Я використовую наступне налаштування

  • 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 (воно не знаходиться в тому ж каталозі, що і моя робоча область, тому ця частина має сенс).

Якщо я налаштував python.PythonPath у файлі settings.json , він просто ігнорує його і не відображає шлях до мого віртуального середовища як варіант. Я також спробував налаштувати його у своїх глобальних налаштуваннях Python, але він також не відображається.

Чи є швидке виправлення, щоб це запрацювало?


3
pip install pylint-django, тоді у налаштуваннях vs code додайте це:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Вайбхав Вішаль

@VaibhavVishal, на жаль, я все одно отримую ті самі результати (додав їх у свій файл settings.json)
jAC

4
Це насправді проблема VScode, яка виявляє пакет імпорту дуже пізно, після перезапуску він виправляється автоматично.
Анупам Халдкар

Відповіді:


116

У налаштуваннях робочої області ви можете встановити шлях до Python таким чином:

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

30
Цей вид працює. Що стосується специфічного імпорту Python, він вирішує ті, що зараз, але не мої власні моделі (тобто "from users.models import User", як і раніше, каже, що не може її вирішити). Думки про це?
jAC

7
Не впевнений. Будь ласка, спробуйте перезавантажити вікно коду vs (з оболонки, code <project_directory> -r) або просто перезапустіть vscode.
руддра

5
Я не впевнений, іноді це може статися, якщо каталог робочої області встановлений неправильно. Будь ласка, переконайтеся, що manage.pyце корінь workspace. Також переконайтесь, що пілінт налаштований належним чином
руддра

3
ти геній! Це було тому, що мій робочий простір не запускався на кореневому рівні проекту. Одного разу я налаштував, що це почало працювати. Дуже дякую!
jAC

1
Дуже дякую! Допоміг мені подолати вікову проблему!

216

Прийнята відповідь не виправить помилку під час імпортування власних модулів.

Використовуйте наступне налаштування у налаштуваннях робочої області .vscode/settings.json:

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

Довідково: Виправлення неполадок, невирішені попередження про імпорт


4
У мене змішана робоча область, весь код python знаходиться в підпапці. Додавання .vscode у підпапку не буде працювати, це єдине робоче рішення.
маргаритка

1
найкраща відповідь для vscode settings.json. (якщо використовується workspace.xml, прийнята відповідь може бути правильним шляхом, але не можу сказати точно. Я також використовую змішану робочу область) велике спасибі за рішення.
Немає

3
Це має бути відповіддю.
Річард Лі

1
Це спрацювало для мене! Посилання на посилання чудово пояснює. TL; DR; Для створених користувачем локальних сценаріїв у підкаталогах вищевказаний параметр допомагає інтерпретатору python розпізнати підкаталог як власну робочу область. Згодом розпізнавання сценаріїв у робочій області та вирішення питань імпорту при імпортуванні цілих модулів або окремих методів.
Завзятий програміст

5
Привіт всім! Я виявив, що ["./path-to-your-code"] може бути ["./**"] у будь-якому випадку, коли подвійна зірка означає будь-яку підпапку в кореневому каталозі! Це більш просте рішення.
alan23273850

63

Альтернативний спосіб: використовуйте командний інтерфейс!

Cmd/ Ctrl+ Shift+ PPython: Виберіть Interpreter → оберіть пакунок, який ви шукаєте:

Введіть тут опис зображення


2
у моєму випадку це не спрацювало, але, сподіваюся, це допоможе іншим у вирішенні цієї проблеми.
jAC

так, це дух, це не складне рішення, це те, що сталося для мене :)
тед,

Це спрацювало для мене. Випадок, коли хтось все ще дивувався в 2019 році.
Сафдер,

@Safder не для мене. використовуючи virtualenv
dillon.harless

це спрацювало для мене. Оскільки у мене є структура каталогів, де в кожному проекті python у мене є нова venv, я venv
вказую на

41

Цю проблему вже відкрито на GitHub:

Невирішена проблема з імпортом Python # 3840

Є дві дуже корисні відповіді від MagnueBrzenk та SpenHouet.

Зараз найкращим рішенням є створення файлу .env у кореневій папці проекту. Потім додайте до нього PYTHONPATH таким чином:

PYTHONPATH=YOUR/MODULES/PATH

А у вашому settings.json додайте:

"python.envFile": ".env"

6
Дякую, це спрацювало чудово! "${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko

1
Виникала поширена проблема з редагованими встановленнями під час використання Microsoft Python Language Server. Однак схоже, що в даний час після нового виправлення, описаного тут: github.com/microsoft/python-language-server/issues/..., проблема виправлена, і будь-який імпорт можна додати за допомогою ExtraPaths. Ознайомтеся з цим Усуненням несправностей, щоб отримати додаткову допомогу: github.com/microsoft/python-language-server/blob/master/…
Томаш Чудзік,

Дякую @TomaszChudzik - Параметр: "python.autoComplete.extraPaths": ["./src"] спрацював як шарм!
Роберт

Іншим рішенням є додавання модулів кодової бази до вашого virtualenv ( add2virtualenv YOUR/MODULES/PATHнаприклад, за допомогою ) та вибір цього virtualenv як вашого інтерпретатора python.
Антван,

21

Якщо у вашому settings.jsonфайлі є цей код , видаліть його:

{
    "python.jediEnabled": false
}

34
Краще додати трохи пояснень.
Тів,

1
Редагування цього рядка - велика зміна у вашому проекті. Рядок: "python.jediEnabled": false відключає старий мовний сервер і вмикає новий мовний сервер Microsoft Python. Подивіться тут: github.com/Microsoft/vscode-python/issues/2177 Я думаю, що набагато простіше просто додати необхідні залежності до нашого envFile. Це описано в іншій відповіді. З новим Microsoft Python Language Server intellisense працює набагато краще для мене.
Томаш Чудзік,

Для мене все навпаки, включення jedi у settings.json працює для мене. Детальніше тут, stackoverflow.com/a/57269144/2877493
nairb

@Tiw тим більше, що інша відповідь свідчить про зовсім протилежне.
Neinstein


19

Коли я це роблю, > reload windowце виправляє.

Довідково: Невирішена проблема з імпортом Python № 3840, коментар dkavraal


Він просто приховує попередження, якщо я клацну на файл, воно знову з’явиться!
vijay athithya

">" Є буквальним або частиною підказки?
Пітер Мортенсен,

17

Якщо ви більш наочні, як я, ви можете використовувати конфігурації коду Visual Studio у меню ФайлНалаштуванняНалаштування ( Ctrl+ ,). Перейдіть до РозширенняPython .

У розділі Аналіз: Вимкнено додайте подавлення такого повідомлення unresolved-import:

Налаштування коду Visual Studio


3
Невирішений імпорт відносного імпорту явно неправильний, це позбавляє його.
Сатья Мішра,

Це лише виправляє попередження, а не стукіт у питаннях. Якщо я використовую метод шляху python, тоді попередження про імпорт зникає, а також працює "деталізація" ("визначення goto") та "підказки параметрів".
davidfrancis

9

Вам потрібно вибрати інтерпретатор, пов’язаний з віртуальним середовищем.

Введіть тут опис зображення

Клацніть тут (у нижньому рядку стану):

Введіть тут опис зображення

І просто виберіть віртуальне середовище, з яким ви працюєте. Готово.

Іноді, навіть якщо вибраний перекладач, це не спрацює. Просто повторіть процес ще раз, і він повинен його вирішити.

Введіть тут опис зображення


1
Це була саме моя проблема (на mac), і вибір відповідного інтерпретатора її вирішив. Дякую!
Mahm00d

9

Жодне з рішень не працювало, крім цього. Заміна "Pylance" або "Microsoft" у settings.json вирішила мою проблему.

"python.languageServer": "Jedi"

7

Цікаво, скільки рішень ця проблема має (чи не має), я спробував більшість із наведених вище, нічого не спрацювало, єдине, що спрацювало, це встановити для мовного сервера python джедай, а не Microsoft у файлі settings.json:

"python.languageServer": "Jedi"

6

Жодна з попередніх відповідей не спрацювала для мене. Однак, додавши обидва рядки нижче до мого файлу settings.json, це було зроблено.

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

Перший рядок насправді просто приховує помилку підключення. Звичайно, це не постійне рішення, але воно не заважає екрану.

Ця відповідь дала мені другий рядок: Помилка коду VS PyLint E0602 (невизначена змінна) зі скомпільованою ProtoBuf структурою Python

Можливо, хтось, хто розуміє Python більше за мене, може пояснити це ще.


Раді, що люди вважають це корисним, проте чи є хтось, хто може пояснити цю другу пару ключ-значення?
dillon.harless

4

Моє рішення

Це рішення призначене лише для поточного проекту.

  1. У кореневій папці проекту створіть папку .vscode

  2. Потім створіть файл .vscode/settings.json

  3. У файл setting.jsonдодайте рядок (це для Python 3)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. Це приклад для Python 2

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. Якщо ви не знаєте, де знаходиться ваша інсталяція Python, просто запустіть команду which pythonабо which python3на терміналі. Він надрукує розташування Python.

  6. Цей приклад працює для докеризованого Python - Django.


4

Для мене проблема була пов'язана з проектом, над яким я працював. Мені знадобився час, щоб це зрозуміти, тому, сподіваюся, це допоможе:

Оригінальна структура папки:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

В іншому_code.py:

from folder.sub_folder_b import my_code.py

Це не спричинило інтелісенс у коді Visual Studio, але виконало ОК.

З іншого боку, додавши "root" на шлях імпорту, дійсно змусило інтелісенс спрацювати, але під час виконання підняло ModuleNotFoundError:

from root.folder.sub_folder_b import my_code.py

Рішенням було видалити файл _ init _.py всередині каталогу "папка", залишивши лише _ init _.py, який знаходиться за адресою /root.


3

Розчин від Shinebayar G спрацювало, але це інше трохи елегантніше:

Скопійовано з невирішеної проблеми імпорту Python # 3840 :

Враховуючи такий приклад структури проекту:

  • робоча областьRootFolder
    • .vscode
  • ... інші папки
  • codeFolder

Що я зробив для вирішення цієї проблеми:

  1. Зайдіть у папку робочої області (тут workspaceRootFolder) і створіть файл .env
  2. У цей порожній файл .env додайте рядок PYTHONPATH = codeFolder (замініть codeFolder на ім'я вашої папки)
  3. Додайте "python.envFile": "$ {workspaceFolder} /. Env" до settings.json
  4. Перезапустіть Visual Studio Code

2

Це працює для мене:

Відкрийте палітру команд ( Ctrl+ Shift+ P) і виберіть "Python: Select Interpreter".

Роблячи це, ви встановлюєте інтерпретатор Python у Visual Studio Code.


в моєму випадку. мій інтерпретатор python 2 чудово працює. просто мій python 3 не може дуже добре співпрацювати
lone_coder

2

Це відбувається тому, що Visual Studio Code розглядає вашу поточну папку як основну, а не фактичну основну папку.

Швидкий спосіб виправити - це надання шляху інтерпретатора до головної папки.

Натисніть Command+ Shift+ P(або Ctrl+ Shift+ Pна більшості інших систем).

Введіть інтерпретатор Python

Виберіть шлях, куди ви встановили Python, з доступних параметрів.



1

У мене інше рішення: мій екземпляр Visual Studio Code підняв virtualenv, що зберігається .venv, але він використовував неправильний двійковий файл Python. Це було використання .venv/bin/python3.7; за допомогою перемикача в синьому рядку стану.

Я змінив його на використання, .venv/bin/pythonі всі мої імпорти були вирішені правильно.

Я не знаю, що робить Visual Studio Code за лаштунками, коли я це роблю, і не розумію, чому це спричинило мою проблему, але для мене це було дещо простішим рішенням, ніж редагування налаштувань робочої області.


1

У разі помилки Pylint встановіть наступне

pipenv install pylint-django

Потім створіть файл, .pylintrc , у кореневій папці та напишіть наступне

load-plugins=pylint-django

1

Якщо ви використовуєте, pipenvвам потрібно вказати шлях до вашого settings.jsonфайлу віртуального середовища. In. Наприклад :

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

Це може допомогти.


1

Для мене це спрацювало, якщо я встановив шляхи для 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 у робочій області. Готово!


Це спрацювало і для мене, більш конкретно встановивши "python.linting.pylintPath" - це те, що вирішило проблему. У мене ніколи не було цієї проблеми, поки я не перейшов на Python 3.9. Я припускаю, що за замовчуванням вони використовують пілінт-шлях.
areed1192

0

Я вирішив помилку імпорту Ctrl+ Shift+ P. Введіть "Параметри налаштувань" і виберіть опцію Параметри Відкрити налаштування (JSON)

І додайте рядок "python.pythonPath": "/usr/bin/"

Тож вміст JSON повинен виглядати так:

{
    "python.pythonPath": "/usr/bin/"
}

Зберігайте інші рядки конфігурації, якщо вони є. Це має імпортувати всі модулі, які ви встановили за допомогою PIP для автозаповнення.


0

Моє рішення було відкрити Visual Studio Code у попередньому каталозі.


Що ви маєте на увазі під словом "попередній каталог" ? Ви маєте на увазі "батьківський каталог" ? Або щось інше?
Пітер Мортенсен

Я відкриваю VSCode лише за допомогою консолі в каталозі до проекту
Jeremias Caceres

0

У моєму випадку у мене вже було активовано середовище Conda , але я все ще хотів, щоб локальні модулі Python були доступні для автозаповнення, вигляду визначення тощо.

Я спробував багато рішень, таких як додавання списку шляхів Python тощо, але що, нарешті, це вирішило для мене, це створити символічне посилання від Conda lib/python{your version}/site-packagesдо мого локального модуля.


0

У мене є одна бібліотека, яка помиляється при спробі включити її за допомогою мовної служби джедаїв і чудово працює без неї (тобто C #).

Бібліотека є jsonslicer, і це залежить від зовнішньої бібліотеки C, яку я встановив /usr/local/lib. Чи може це мати щось спільне?

Я встановив послугу джедая та бібліотеку у своєму середовищі Conda і використовував це середовище у Visual Studio. Це чудово працює під час виконання та в моєму терміналі, але не під час перевірки проблем у моїх вихідних файлах, і це відображається як помилка.


0

Спочатку переконайтеся, що ви встановили плагін, але, ймовірно, каталог робочої області встановлений неправильно. Просто поставте прапорець Pylint і відредагуйте базовий файл settings.json.

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

Що ви маєте на увазі під фразою "перевірка пілінта" ? Прапорець? Що воно існує / встановлено? Щось ще? Відповідь, відредагувавши свою відповідь , а не тут у коментарях (і без "Редагувати:", "Оновити:" або подібного).
Пітер Мортенсен,

0

Встановіть код-бігун і додайте код нижче в папку settings.json:

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

"python": "(виконуваний файл Python з модулями або його шлях) -u",


Що таке "код-бігун"? Чи можете ви додати посилання на нього ( відредагувавши свою відповідь , а не тут, у коментарях)?
Пітер Мортенсен

0

Я зіткнувся з цією проблемою трьома способами. Хоча для кожного з них доступне рішення у відповідях на це питання, я просто подумав скласти все це разом.

  1. Спочатку я отримав "Невирішений імпорт" під час імпорту деяких модулів, і я помітив, що мої інсталяції відбуваються в глобальному pip, а не у віртуальному середовищі.

    Ця проблема виникла через інтерпретатор Python. Вам потрібно вибрати інтерпретатор у Visual Studio Code за допомогою Shift+ Ctrl+, Pа потім ввести Select Python Interpreter. Виберіть тут свого перекладача venv .

  2. Друге питання було: Наведена вище зміна не вирішила мою проблему повністю. Цього разу це було через файл settings.json . Якщо у вашому каталозі проекту немає файлу settings.json , створіть його та додайте в нього наступний рядок:

        {
            "python.pythonPath": "apis/bin/python"
        }
    

    Це в основному буде повідомляти Visual Studio Code використовувати інтерпретатор Python, який знаходиться у вашому venv.

  3. Третя проблема була під час імпорту спеціального модуля або файлу Python в іншу програму. Для цього вам потрібно зрозуміти структуру папок. Оскільки Python у venv знаходиться всередині bin, вам потрібно буде вказати папку вашого модуля (більшу частину папки програми). У моєму випадку це було app,

        from app.models import setup_db
    

    Усно, імпорт setup_db з models.py знаходиться в папці програми .


0

У мене така ж проблема з python 3.8.5 за допомогою venv, vscode 1.48.2 я знайшов своє рішення. У папці (env) / lib / site-пакети не містять пакунки. Я використовую цей параметр (.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.