Пилинт кода VS (import-error) Sub-модуль "Невозможно импортировать" из пользовательского каталога - PullRequest
0 голосов
/ 14 апреля 2020

Я организовал свои самописные сценарии Python в дереве нескольких подкаталогов, начиная с родительского каталога "Сценарии", который уже включен в "python.autoComplete.extraPaths" в настройках- 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 scr например, с помощью следующих строк: Я получаю 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 также не дало эффекта.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

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

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

0 голосов
/ 23 апреля 2020

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...