VS Code pylint(import-error) Подмодуль "Невозможно импортировать" из пользовательского каталога

Я организовал свои собственные сценарии Python в дереве из нескольких подкаталогов, начиная с родительского каталога "Scripts", который уже включен в "python.autoComplete.extraPaths" внутри settings-json:

"python.autoComplete.extraPaths": ["/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts",
                                       "/home/andylu/anaconda3/lib/python3.7/site-packages"]

Кроме того, я добавил файл окружения Python:

"python.envFile": "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Visual_studio_code/vscode_own_scripts.env"

который содержит строку

export PYTHONPATH=/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts:/home/andylu/anaconda3/lib/python3.7/site-packages

Все это отлично работало раньше, когда все мои скрипты были распределены чуть более чем на одном уровне каталога, например:

+---Scripts
|   +---General
|   |   +---script_one.py
|   |   +---script_two.py

Когда я импортировал в любой скрипт python, например script_one.py, Я начал сценарий с

import sys
sys.path.append(
    "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/"
)

import General.script_one as one

и pylint правильно распознал этот импортированный скрипт, не выбрасывая вышеупомянутыйVS Code pylint(import-error).


Теперь ситуация иная. Скриптов стало так много, что я разделил подпапкуGeneralчтобы содержать дополнительный уровень подкаталога, чтобы получить сценарии организованы более доходчиво:

+---Scripts
|   +---General
|   |   +---Plotting
|   |   |   +---script_one.py
|   |   |   +---script_two.py
|   |   +---Misc
|   |   |   +---script_three.py
|   |   |   +---script_four.py
....

При запуске скрипта Python, например, со следующих строк, я получаюVS Code pylint(import-error) для каждого из следующих операций импорта.

# Package importing

import sys
sys.path.append(
    "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/"
)

import General.Plotting.auxiliary_plotting_functions as aux_plot
import General.Plotting.plotting as plot

#%%
# TIME MEASUREMENT for the entire code/function
import General.Misc.timing

Я не знаю, почему pylint внезапно перестает распознавать импорт только потому, что я добавил дополнительный уровень подкаталога. Я бы хотел, чтобы эти бессмысленные ошибки импорта pylint исчезли, поскольку фактически суб-подмодели импортируются правильно при выполнении кодов.

Я даже пытался модифицировать .pylintrc - файл, лежащий под/home/andylu/anaconda3/pkgs/pylint-2.3.1-py37_0/lib/python3.7/site-packages/pylint/test/regrtest_data/.pylintrc:

[MASTER]

optimize-ast=no

init-hook='import sys; sys.path.append("/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts")'

Добавление init-hook - линия тоже не подействовала.

3 ответа

Решение

Я нашел отличный способ решения моей проблемы с этим ответом. Он указывает на часть управления сообщениями pylint-docs.

Практически мне просто нужно было добавить комментарий # pylint: disable=import-error за моим пользовательским импортом вот так:

import General.Plotting.auxiliary_plotting_functions as aux_plot  # pylint: disable=import-error

Это отлично решает мою проблему, так как я, честно говоря, не нашел простого решения этой проблемы, настроив, например, .pylintrc файл, не говоря уже обо всех моих безуспешных попытках, связанных с PYTHONPATH и файлы окружения и т. д.

Проще говоря, мои пользовательские модули импортируются правильно при выполнении скриптов в VS Code, но единственная неприятная деталь заключалась в том, что pylint не получил его и показал мне бесполезные ошибки импорта. Теперь pylint больше не показывает эту бессмыслицу, это все, что я хотел:)

Я уверен, что может быть более элегантное решение, но пока что вышеупомянутый обходной путь пригодился. Если кто-то предложит "лучшее" решение, просто опубликуйте его здесь, и я изменю ответ на ваш.

Две вещи. Один, добавить__init__.py файлы во все ваши подкаталоги, чтобы сделать их правильными пакетами.

Во-вторых, вам не нужно напрямую добавлять site-packagesкаталог. Если это среда Python, которую вы используете, убедитесь, что вы выбрали ее из расширения.

Другой ответ (вдохновленный @ andreas-l):

В .pylintrc моего пораженного проекта (как и когда возникла проблема, я не знаю0) я нашел следующий раздел «Управление сообщениями» и добавил к нему «ошибку импорта»:

      [MESSAGES CONTROL]

  disable=
    missing-docstring
    import-error

Перезапустил VSCode и больше не было ошибочных сообщений об ошибках.

Другие вопросы по тегам