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 и больше не было ошибочных сообщений об ошибках.