我尝试启动 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.py
python_files = test_*.py
到目前为止我尝试过的:
- 我尝试将 init .py添加到测试目录(似乎不推荐并且没有工作)
- 停用并重新激活virtualenv
- 更改drf .settings.py 用于 drf.drf.settings 但什么都没有
- 使用 python -m pytest 测试将 pytest 作为模块运行
编辑:
-
如果我
cd drf
并且尝试过,我会得到一个里尔不同的错误
ImportError: No module named 'drf.settings.py'; 'drf.settings' is not a package
pytest-django found a Django project in . (it contains manage.py) and added it to the Python path.
If this is wrong, add "django_find_project = false" to pytest.ini and explicitly manage your Python path.
如果你有什么建议;)
你的问题有两个部分:
- pytest 无法找到你的 Django 设置。
- pytest 无法导入你的设置模块。
让我们分别解决这两个问题。
1. 配置 pytest-django 查找你的 Django 项目
pytest-django
提供了一种自动查找你的 Django 项目的机制,但它依赖于在项目根目录中找到
manage.py
文件。在你的例子中,
manage.py
文件位于
drf/
子目录中。你有两个选择来解决这个问题:
选项 1:从项目根目录运行 pytest,并指定 Django 设置模块:
-
确保你的
pytest.ini
文件内容如下:
[pytest]
DJANGO_SETTINGS_MODULE = drf.drf.settings
注意:我们这里使用
drf.drf.settings
,因为你的设置文件位于
drf/drf/settings.py
。
- 从你的项目根目录运行以下命令:
pytest
这将告诉
pytest-django
使用指定的设置模块,即使它没有自动检测到 Django 项目。
选项 2:从
drf/
目录运行 pytest:
-
从
drf/
目录运行pytest
命令:
cd drf
pytest
-
由于
manage.py
文件位于当前目录中,pytest-django
应该能够自动检测到你的 Django 项目。但是,你可能仍需要确保你的pytest.ini
文件包含正确的DJANGO_SETTINGS_MODULE
设置。
2. 解决
ImportError
ImportError: No module named 'drf.settings.py'
表明 Python 无法找到你的设置模块。这可能是由于你的 Python 路径配置问题造成的。
尝试以下步骤来解决这个问题:
-
确保你的虚拟环境处于活动状态。
-
如果你使用的是选项 1(从项目根目录运行 pytest),请尝试将
drf
目录添加到你的PYTHONPATH
环境变量中:
export PYTHONPATH=$PYTHONPATH:$(pwd)/drf
pytest
这将确保 Python 解释器可以在
drf
目录中搜索模块。
-
作为一种好的做法,请考虑在你的
drf/drf/__init__.py
文件中添加以下行:
default_app_config = 'drf.drf.apps.DrfConfig'
这将明确告诉 Django 如何加载你的应用程序配置。
完成这些步骤后,
pytest
应该能够找到并导入你的 Django 设置,并且你应该能够运行你的测试了.