Не удалось обнаружить модульный тест VSCode Python: «utils» не является пакетом → порядок sys.path? ⇐ Python
Не удалось обнаружить модульный тест VSCode Python: «utils» не является пакетом → порядок sys.path?
Через несколько дней обнаружение модульных тестов Visual Studio Code Python больше не работает для меня в нескольких проектах, содержащих пакет под названием utils:
2023-10-18 09:37:36.901 [info] Обнаружение тестов unittest с аргументами: /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py,--udiscovery,-v,-s,./tests,-p,test_*.py ... ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Это работает, как только я переименовываю всю папку utils во что-нибудь другое, например helper_utils. Запуск тестов из терминала с помощью
python3 -m unittest обнаружить тесты -v работает нормально, даже если каталог по-прежнему называется utils. Я уже пытался понизить версию расширения «Python» на несколько месяцев и перейти на другую версию Python (пока пробовал 3.8 и 3.11), но ошибка постоянная.
Верхняя часть тестового файла выглядит следующим образом (отпечаток sys.path для отладки):
импортировать систему печать (sys.path) # Другой (рабочий) импорт... из utils.data_storage_selector импортировать DataStorageSelector из utils.export_to_dict_helper импортировать ExportToDictHelper Полный результат обнаружения теста выглядит следующим образом:
2023-10-18 09:37:36.901 [info] Обнаружение тестов unittest с аргументами: /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py,--udiscovery,-v,-s,./tests,-p,test_*.py 2023-10-18 09:37:36.901 [информация] > ~/.pyenv/versions/3.8.16/bin/python ~/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py --udiscovery -v -s ./tests -p test_*.py 2023-10-18 09:37:36.901 [информация] cwd: . 2023-10-18 09:37:37.218 [информация] [ '/home/phip/.../poleno-event-model/tests', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter', '/home/phip/.../poleno-event-model', '/home/phip/.pyenv/versions/3.8.16/lib/python38.zip', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/lib-dynload', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages/CharPyLS-1.0.3-py3.8-linux-x86_64.egg', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python' ] 2023-10-18 09:37:37.498 [информация] Тестовый сервер подключен к клиенту. 2023-10-18 09:37:37.571 [ошибка] Ошибка обнаружения теста Unittest Не удалось импортировать тестовый модуль: test_data_model_base. Traceback (последний вызов последний): Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 436, в _find_test_path модуль = self._get_module_from_name(имя) Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 377, в _get_module_from_name __import__(имя) Файл "/home/phip/.../poleno-event-model/tests/test_data_model_base.py", строка 20, в из полюсо_event_model.data_model_base импортировать DataModelBase Файл "/home/phip/.../poleno-event-model/poleno_event_model/__init__.py", строка 18, в из .event_model_decl импорт event_model Файл "/home/phip/.../poleno-event-model/poleno_event_model/event_model_decl.py", строка 44, в из utils.export_to_dict_helper импортировать AttributeFilter ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Не удалось импортировать тестовый модуль: test_poleno_event_model. Traceback (последний вызов последний): Файл «/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py», строка 436, в _find_test_path модуль = self._get_module_from_name(имя) Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 377, в _get_module_from_name __import__(имя) Файл "/home/phip/.../poleno-event-model/tests/test_poleno_event_model.py", строка 26, в из полюсо_event_model импортировать BackgroundData, MeasurementEvent Файл "/home/phip/.../poleno-event-model/poleno_event_model/__init__.py", строка 18, в из .event_model_decl импорт event_model Файл "/home/phip/.../poleno-event-model/poleno_event_model/event_model_decl.py", строка 44, в из utils.export_to_dict_helper импортировать AttributeFilter ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Для сравнения, это вывод при запуске тестов вручную:
python3 -m unittest обнаружить тесты [ '/home/phip/.../poleno-event-model/tests', '/home/phip/.../poleno-event-model', '/home/phip/.../poleno-event-model', '/home/phip/.pyenv/versions/3.8.16/lib/python38.zip', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/lib-dynload', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages/CharPyLS-1.0.3-py3.8-linux-x86_64.egg' ] .............. -------------------------------------------------- -------------------- Провёл 17 тестов за 0,192 с. ХОРОШО Каталог utils расположен в корне проекта (на том же уровне, что и tests и большинство других локальных каталогов пакетов) и содержит файл __init__.py< /code> файл.
Если это имеет значение, версии инструментов следующие:
[*]ОС: Ubuntu 23.04 [*]Python: протестировано на версиях 3.8 и 3.11 через pyenv. [*]VSCode: 1.83.1 (та же проблема с 1.83.0, более старая версия Snap недоступна для сравнения) [*]Расширение Python: v2023.19.12901009 (предварительная версия для тестирования, но та же проблема с текущей и предыдущей версией) Прогресс
Во время написания вопроса я, вероятно, обнаружил проблему. Папка расширения VSCode unittestadapter, которая помещается в sys.path во время обнаружения и перед папкой рабочей области, выглядит следующим образом:
ls -alh /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter всего 44К drwxrwxr-x 3 phip phip 4.0K 17 октября 16:18 . drwxrwxr-x 8 phip phip 4.0K 17 октября 16:17 .. -rw-rw-r-- 1 фип фип 4.6K 17 октября 16:17 Discovery.py -rw-rw-r-- 1 фип фип 11К 17 октября 16:17 Execution.py -rw-rw-r-- 1 фип фип 94 17 октября 16:17 __init__.py drwxrwxr-x 2 phip phip 4.0K 17 октября 16:25 __pycache__ -rw-rw-r-- 1 фип фип 7.9K 17 октября 16:17 utils.py Этот модуль utils.py затеняет мой локальный для проекта пакет utils.
Вопрос
С учетом вышеизложенного проблема сводится к Как исправить порядок элементов sys.path при запуске обнаружения модульного теста VSCode, чтобы папка рабочей области располагалась перед любыми каталогами расширений ?
Второстепенный вопрос: почему это внезапно меняется и, очевидно, затрагивает только меня; по крайней мере, я не смог найти что-то подобное в поиске в Интернете. Если бы это была проблема с последней версией VSCode, я бы предположил, что в сети полно сообщений об этом.
Обновить
Я до сих пор не нашел решения проблемы, но исследовал ее еще: судя по всему, каталога unittestadapter в sys.path вообще не должно быть, поскольку его внутренний модуль utils используется квалифицированным образом (unittestadapter.utils). Поэтому следует добавить только путь pythonFiles, который находится в списке чуть ниже.
Интересно, что я не могу воспроизвести проблему при создании нового минимального проекта (только основной модуль, пакет утилит с одним модулем и тестовый файл); в этом случае дополнительный unittestadapter не добавляется. Так что, вероятно, проблема не в установке VSCode. Однако проблема сохраняется как минимум в двух проектах, содержащих модуль utils. И это не исправляется путем удаления каталогов __pycache__ или переименования папки проекта (чтобы сделать недействительным любой кеш в файлах установки/конфигурации VSCode).
Через несколько дней обнаружение модульных тестов Visual Studio Code Python больше не работает для меня в нескольких проектах, содержащих пакет под названием utils:
2023-10-18 09:37:36.901 [info] Обнаружение тестов unittest с аргументами: /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py,--udiscovery,-v,-s,./tests,-p,test_*.py ... ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Это работает, как только я переименовываю всю папку utils во что-нибудь другое, например helper_utils. Запуск тестов из терминала с помощью
python3 -m unittest обнаружить тесты -v работает нормально, даже если каталог по-прежнему называется utils. Я уже пытался понизить версию расширения «Python» на несколько месяцев и перейти на другую версию Python (пока пробовал 3.8 и 3.11), но ошибка постоянная.
Верхняя часть тестового файла выглядит следующим образом (отпечаток sys.path для отладки):
импортировать систему печать (sys.path) # Другой (рабочий) импорт... из utils.data_storage_selector импортировать DataStorageSelector из utils.export_to_dict_helper импортировать ExportToDictHelper Полный результат обнаружения теста выглядит следующим образом:
2023-10-18 09:37:36.901 [info] Обнаружение тестов unittest с аргументами: /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py,--udiscovery,-v,-s,./tests,-p,test_*.py 2023-10-18 09:37:36.901 [информация] > ~/.pyenv/versions/3.8.16/bin/python ~/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter/discovery .py --udiscovery -v -s ./tests -p test_*.py 2023-10-18 09:37:36.901 [информация] cwd: . 2023-10-18 09:37:37.218 [информация] [ '/home/phip/.../poleno-event-model/tests', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter', '/home/phip/.../poleno-event-model', '/home/phip/.pyenv/versions/3.8.16/lib/python38.zip', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/lib-dynload', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages/CharPyLS-1.0.3-py3.8-linux-x86_64.egg', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles', '/home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/lib/python' ] 2023-10-18 09:37:37.498 [информация] Тестовый сервер подключен к клиенту. 2023-10-18 09:37:37.571 [ошибка] Ошибка обнаружения теста Unittest Не удалось импортировать тестовый модуль: test_data_model_base. Traceback (последний вызов последний): Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 436, в _find_test_path модуль = self._get_module_from_name(имя) Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 377, в _get_module_from_name __import__(имя) Файл "/home/phip/.../poleno-event-model/tests/test_data_model_base.py", строка 20, в из полюсо_event_model.data_model_base импортировать DataModelBase Файл "/home/phip/.../poleno-event-model/poleno_event_model/__init__.py", строка 18, в из .event_model_decl импорт event_model Файл "/home/phip/.../poleno-event-model/poleno_event_model/event_model_decl.py", строка 44, в из utils.export_to_dict_helper импортировать AttributeFilter ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Не удалось импортировать тестовый модуль: test_poleno_event_model. Traceback (последний вызов последний): Файл «/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py», строка 436, в _find_test_path модуль = self._get_module_from_name(имя) Файл "/home/phip/.pyenv/versions/3.8.16/lib/python3.8/unittest/loader.py", строка 377, в _get_module_from_name __import__(имя) Файл "/home/phip/.../poleno-event-model/tests/test_poleno_event_model.py", строка 26, в из полюсо_event_model импортировать BackgroundData, MeasurementEvent Файл "/home/phip/.../poleno-event-model/poleno_event_model/__init__.py", строка 18, в из .event_model_decl импорт event_model Файл "/home/phip/.../poleno-event-model/poleno_event_model/event_model_decl.py", строка 44, в из utils.export_to_dict_helper импортировать AttributeFilter ModuleNotFoundError: нет модуля с именем «utils.export_to_dict_helper»; «utils» — это не пакет Для сравнения, это вывод при запуске тестов вручную:
python3 -m unittest обнаружить тесты [ '/home/phip/.../poleno-event-model/tests', '/home/phip/.../poleno-event-model', '/home/phip/.../poleno-event-model', '/home/phip/.pyenv/versions/3.8.16/lib/python38.zip', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/lib-dynload', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages', '/home/phip/.pyenv/versions/3.8.16/lib/python3.8/site-packages/CharPyLS-1.0.3-py3.8-linux-x86_64.egg' ] .............. -------------------------------------------------- -------------------- Провёл 17 тестов за 0,192 с. ХОРОШО Каталог utils расположен в корне проекта (на том же уровне, что и tests и большинство других локальных каталогов пакетов) и содержит файл __init__.py< /code> файл.
Если это имеет значение, версии инструментов следующие:
[*]ОС: Ubuntu 23.04 [*]Python: протестировано на версиях 3.8 и 3.11 через pyenv. [*]VSCode: 1.83.1 (та же проблема с 1.83.0, более старая версия Snap недоступна для сравнения) [*]Расширение Python: v2023.19.12901009 (предварительная версия для тестирования, но та же проблема с текущей и предыдущей версией) Прогресс
Во время написания вопроса я, вероятно, обнаружил проблему. Папка расширения VSCode unittestadapter, которая помещается в sys.path во время обнаружения и перед папкой рабочей области, выглядит следующим образом:
ls -alh /home/phip/.vscode/extensions/ms-python.python-2023.19.12901009/pythonFiles/unittestadapter всего 44К drwxrwxr-x 3 phip phip 4.0K 17 октября 16:18 . drwxrwxr-x 8 phip phip 4.0K 17 октября 16:17 .. -rw-rw-r-- 1 фип фип 4.6K 17 октября 16:17 Discovery.py -rw-rw-r-- 1 фип фип 11К 17 октября 16:17 Execution.py -rw-rw-r-- 1 фип фип 94 17 октября 16:17 __init__.py drwxrwxr-x 2 phip phip 4.0K 17 октября 16:25 __pycache__ -rw-rw-r-- 1 фип фип 7.9K 17 октября 16:17 utils.py Этот модуль utils.py затеняет мой локальный для проекта пакет utils.
Вопрос
С учетом вышеизложенного проблема сводится к Как исправить порядок элементов sys.path при запуске обнаружения модульного теста VSCode, чтобы папка рабочей области располагалась перед любыми каталогами расширений ?
Второстепенный вопрос: почему это внезапно меняется и, очевидно, затрагивает только меня; по крайней мере, я не смог найти что-то подобное в поиске в Интернете. Если бы это была проблема с последней версией VSCode, я бы предположил, что в сети полно сообщений об этом.
Обновить
Я до сих пор не нашел решения проблемы, но исследовал ее еще: судя по всему, каталога unittestadapter в sys.path вообще не должно быть, поскольку его внутренний модуль utils используется квалифицированным образом (unittestadapter.utils). Поэтому следует добавить только путь pythonFiles, который находится в списке чуть ниже.
Интересно, что я не могу воспроизвести проблему при создании нового минимального проекта (только основной модуль, пакет утилит с одним модулем и тестовый файл); в этом случае дополнительный unittestadapter не добавляется. Так что, вероятно, проблема не в установке VSCode. Однако проблема сохраняется как минимум в двух проектах, содержащих модуль utils. И это не исправляется путем удаления каталогов __pycache__ или переименования папки проекта (чтобы сделать недействительным любой кеш в файлах установки/конфигурации VSCode).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение