Я пытался запустить pytest, но pytest не может найти файл настроек.
Я в virtualenv с Python 3.11.9
и pytest 8.3.2
ImportError: No module named 'drf.settings'
pytest-django could not find a Django project (no manage.py file could be found). You must explicitly add your Django project to the Python path to have it picked up.
вот структура моего проекта
├── README.md
├── drf
│ ├── drf
│ │ ├── __init__.py
│ │ ├── production_settings.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── manage.py
│ └── tests
│ ├── __pycache__
│ │ └── test_auth.cpython-311-pytest-8.3.2.pyc
│ ├── factory_boy
│ │ ├── __pycache__
│ │ │ └── factory_models.cpython-311.pyc
│ │ └── factory_models.py
│ └── test_auth.py
├── drf-uwsgi.ini
├── pytest.ini
├── requirements.in
├── requirements.txt
и здесь содержимое pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = drf.settings
python_files = test_*.py
django_debug_mode = true
pythonpath = .venv/bin/python
Что я пробовал до сих пор:
редактировать: в данный момент я могу запустить pytest с любой проблемой, но для этого я использую конкурс и ищу решение с помощью pytest.ini
Если у вас есть предложения ;)
Я попробовал ваше решение, я объединил верхнюю часть с верхней и добавил init.py в верхнюю папку, на этот раз я получаю немного другую ошибку: ImportError: No module named 'drf.settings.py'; 'drf.settings' is not a package
Вам нужно добавить pythonpath
внутри pytest.ini
следующим образом:
[pytest]
pythonpath = drf
DJANGO_SETTINGS_MODULE = drf.settings
python_files = test_*.py
Или вы можете изменить макет tests
и переместить pytest.ini
из корня проекта в папку tests
, вот так Итак, опубликуйте.
Примечание: используйте drf.settings
вместо drf.settings.py
.
Я пытаюсь использовать pythonpath, но, похоже, это не работает. У меня есть виртуальная среда для моего Python, так может ли это быть причиной?
Я пытаюсь использовать confest.py с содержимым import os import django # set up Django environment os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf.settings") django.setup()
, которое работает, но я прочитал, что не рекомендуется использовать conftest.
@jordan нет, использование virtualenv - это не тот случай, это нормально. вы правильно использовали DJANGO_SETTINGS_MODULE = drf.settings
в своем pytest.ini
без постфикса .py
?
да, еще я обновила пост актуальным pytest.ini
@jordan, какая у тебя команда и путь для запуска pytest?
Я использую pytest
(python -m pytest
тоже работает), но пути не указываю
@jordan Я имею в виду текущий путь, по которому вы используете команду pytest. в любом случае вариант использования должен быть следующим: перейти по пути к проекту, активировать venv source venv/bin/activate
, установить требования, а также pytest, перейти к drf/
, ввести pytest tests
должно работать до тех пор, пока pythonpath = drf and DJANGO_SETTINGS_MODULE = drf.settings
внутри pytest.ini
@jordan, вы также можете переместить pytest.ini в папкуtests/ и изменить значение pythonpath на ../
.
Ой, извини, я убегаю от /Users/user/projects/account/django/drf
от drf, я не участвую в конкурсе, но я вызвал еще одну ошибку, может быть, это другое дело, но Database access not allowed, use the "django_db" mark,
может быть, для этого лучше открыть другой пост
Это связано со структурой папок.
pytest
ожидает запуска из той же папки, что и вашmanage.py
. Вам следует рассмотреть возможность объединения верхней и верхней папокdrf
.