Pytest не нашел мой каталог настроек

Я пытался запустить 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

Что я пробовал до сих пор:

  • Я попытался добавить init.py в каталог тестов (кажется, не рекомендуется, и это не сработало)
  • деактивировать и повторно активировать virtualenv
  • измените drf.settings.py на drf.drf.settings, но ничего
  • запустить pytest как модуль с тестами python -m pytest

редактировать: в данный момент я могу запустить pytest с любой проблемой, но для этого я использую конкурс и ищу решение с помощью pytest.ini

Если у вас есть предложения ;)

Это связано со структурой папок. pytest ожидает запуска из той же папки, что и ваш manage.py. Вам следует рассмотреть возможность объединения верхней и верхней папок drf.

Klaus D. 02.08.2024 09:12

Я попробовал ваше решение, я объединил верхнюю часть с верхней и добавил init.py в верхнюю папку, на этот раз я получаю немного другую ошибку: ImportError: No module named 'drf.settings.py'; 'drf.settings' is not a package

jordan 02.08.2024 09:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно добавить 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, так может ли это быть причиной?

jordan 05.08.2024 04:27

Я пытаюсь использовать confest.py с содержимым import os import django # set up Django environment os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf.settings") django.setup(), которое работает, но я прочитал, что не рекомендуется использовать conftest.

jordan 05.08.2024 04:43

@jordan нет, использование virtualenv - это не тот случай, это нормально. вы правильно использовали DJANGO_SETTINGS_MODULE = drf.settings в своем pytest.ini без постфикса .py?

Benyamin Jafari 05.08.2024 08:44

да, еще я обновила пост актуальным pytest.ini

jordan 05.08.2024 09:23

@jordan, какая у тебя команда и путь для запуска pytest?

Benyamin Jafari 05.08.2024 10:23

Я использую pytest (python -m pytest тоже работает), но пути не указываю

jordan 05.08.2024 10:43

@jordan Я имею в виду текущий путь, по которому вы используете команду pytest. в любом случае вариант использования должен быть следующим: перейти по пути к проекту, активировать venv source venv/bin/activate, установить требования, а также pytest, перейти к drf/, ввести pytest tests должно работать до тех пор, пока pythonpath = drf and DJANGO_SETTINGS_MODULE = drf.settings внутри pytest.ini

Benyamin Jafari 05.08.2024 10:51

@jordan, вы также можете переместить pytest.ini в папкуtests/ и изменить значение pythonpath на ../.

Benyamin Jafari 05.08.2024 10:52

Ой, извини, я убегаю от /Users/user/projects/account/django/drf от drf, я не участвую в конкурсе, но я вызвал еще одну ошибку, может быть, это другое дело, но Database access not allowed, use the "django_db" mark, может быть, для этого лучше открыть другой пост

jordan 05.08.2024 11:06

Другие вопросы по теме