Сбой абсолютного импорта из пакета «tests» с ошибкой ModuleNotFoundError в отладчике PyCharm

#python #python-3.x #pycharm #ipython #python-module

#python #python-3.x #pycharm #ipython #python-модуль

Вопрос:

Учитывая следующий простой проект Python,

 $ tree
.
├── Pipfile
├── Pipfile.lock
├── src
└── tests
    ├── test_foo.py
    └── util.py

$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
ipython = "*"
pytest = "*"

[dev-packages]

[requires]
python_version = "3.9"

$ cat tests/util.py 
FOO = 5

$ cat tests/test_foo.py 
from tests.util import FOO


def test_foo():
    assert FOO == 5
 

Запуск PyCharm debugger при test_foo использовании pytest с соответствующим pipenv --venv выдает следующую ошибку:

 Connected to pydev debugger (build 202.8194.15)
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'tests.util'
 

Ответ №1:

В test_foo.py , если вы распечатаете sys.path , вы заметите, что PyCharm внедрил <path_to_venv>/lib/python<version>/site-packages/IPython/extensions , который содержит tests модуль, который блокирует локальное пространство tests имен. Об этой проблеме уже сообщалось в восходящем потоке: см. https://github.com/ipython/ipython/issues/11592 .

На данный момент есть два обходных пути:

  1. Переименуйте свой tests каталог во что-то другое.
  2. Удалите <path_to_venv>/lib/python<version>/site-packages/IPython/extensions/tests папку.