Еще один модуль без имени *** с помощью pytest

#python #python-3.x #import #module #pytest

#python #python-3.x #импорт #модуль #pytest

Вопрос:

Вот структура проекта:

 my_module/
├── pytest.ini
├── README
├── requirements.txt
├── my_module
│   ├── __init__.py
│   ├── my_module.py
│   └── utils
│       ├── helpers.py
│       ├── __init__.py
│       └── logger.py
└── tests
    ├── __init__.py
    ├── requirements.txt
    └── test_my_module.py
  

Я не понимаю, почему я получаю ModuleNotFoundError: No module name 'utils' при запуске pytest в корневом каталоге.

Вот ошибка

 ________________________________________________________________ ERROR collecting tests/test_robomaster.py _________________________________________________________________
ImportError while importing test module '/home/heyyou/git/my_module/tests/test_my_module.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.6/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/test_my_module.py:3: in <module>
    from my_module import my_module
my_module/my_module.py:6: in <module>
    from utils import *
E   ModuleNotFoundError: No module named 'utils'
  

Это работает, когда я добавляю __init__.py на корневом уровне (такой же, как readme), но я не думаю, что это хороший обходной путь.

Импорт работает, если я запускаю my_module.py скрипт напрямую.

Ответ №1:

Вам нужно выполнить импорт, подобный from my_module.utils import * . Поскольку pytest вставка my_module в начало sys.path

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

1. проблема в том, что теперь я больше не могу запускать свой модуль таким python3 my_module/my_module.py образом, потому что я получаю ModuleNotFoundError: No module named 'my_module.utils'; 'my_module' is not a package

2. Запуск из корневой папки my_module python -m my_module.my_module