#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