GOOGLE ADS

суббота, 7 мая 2022 г.

VSCode ModuleNotFoundError: нет модуля с именем X

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

ModuleNotFoundError: No module name 'x'

Моя текущая структура папок выглядит следующим образом:

package
|---module
|------__init__.py
|------calculations.py
|------miscfuncs.py
|---tests
|------__init__.py
|------test_calcs.py
|---setup.py
|---requirements.txt

Однако, когда я запускаю свои тесты (PyTest) через VSCode и использую import module.calculations as calcили from module.calculations import Classв test_calcs.py, тесты работают, как и ожидалось, что меня сбивает с толку.

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

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

import sys
print(sys.path)

Я также использовал следующее в файлах безрезультатно:

import module.calculations
import.module.calculations
from. import miscfuncs

При попытке import.module.calculationsполучаю следующее:

ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package

При попытке from. import miscfuncsв расчетах.py я получаю следующую ошибку:

ImportError: cannot import name 'miscfuncs'

При работе с файлом в папке модуля я могу использовать относительный импорт: import calculationsи он отлично работает. Это нормально для файлов внутри модуля, но не тогда, когда я работаю в test_calcs.py.

В моем setup.py у меня есть строка для:

packages=['module']

С удовольствием опубликую дополнительную информацию, если потребуется, или ссылку на мой репозиторий для полного кода.

РЕДАКТИРОВАТЬ

Следующее решение Ремрама:

Я обновил, launch.jsonчтобы включить переменные CWDи.PYTHONPATH

Имя модуля по-прежнему не распознается, однако IntelliSense в VSCode прекрасно распознает функции в импортированном файле.

"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"env": {"PYTHONPATH": "${cwd}"
}
}
]

Решение проблемы

Убедитесь, что вы работаете из packageпапки (а не из package/module), если хотите import module.calculationsработать. Вы также можете установить PYTHONPATHпеременную среды на путь к packageпапке.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...