You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定manage.py路径解决pytest-django找不到Django项目问题

解决pytest-django找不到非根目录manage.py的问题

我之前也碰到过一模一样的场景:Django项目的manage.py不在根目录,直接跑pytest会抛出找不到项目的错误,但单独指定测试文件却能正常运行。其实不用纠结于直接指定manage.py的路径,我们可以通过配置Django的settings模块来让pytest-django正确识别项目,同时完美兼容旧的unittest测试和新的pytest测试。这里有几个实用的解决方案:

方法1:用--ds参数直接指定settings模块

这是最直接的临时解决方案,完全不需要依赖manage.py的位置。假设你的manage.py在./backend/manage.py,对应的Django settings模块是backend.settings,运行pytest时加上参数即可:

pytest --ds=backend.settings

这个参数会告诉pytest-django直接加载指定的settings模块,跳过查找manage.py的步骤。

方法2:设置环境变量DJANGO_SETTINGS_MODULE

通过环境变量告诉pytest-django你的settings位置,这样每次运行pytest时不用重复加参数:

  • Unix/Linux/macOS:
    export DJANGO_SETTINGS_MODULE=backend.settings
    pytest
    
  • Windows CMD:
    set DJANGO_SETTINGS_MODULE=backend.settings
    pytest
    
  • Windows PowerShell:
    $env:DJANGO_SETTINGS_MODULE="backend.settings"
    pytest
    

方法3:在pytest配置文件中永久指定settings

如果不想每次都手动设置参数或环境变量,可以在项目根目录创建pytest的配置文件,让配置永久生效:

用pytest.ini配置

创建pytest.ini文件,添加以下内容:

[pytest]
django_settings_module = backend.settings

用conftest.py配置

如果已经有conftest.py,可以在里面添加初始化代码:

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
django.setup()

之后直接运行pytest就会自动加载指定的settings了。

方法4:将manage.py所在目录加入Python路径

如果你更希望让pytest-django找到manage.py,可以把manage.py所在的目录加入Python路径:

  • Unix/Linux/macOS:
    PYTHONPATH=./backend pytest
    
  • Windows:
    set PYTHONPATH=./backend && pytest
    

这样pytest就能在指定的目录下找到manage.py,进而自动识别Django项目。

这些方法都能完美兼容你现有的unittest测试和新编写的pytest测试,因为pytest本身就支持运行unittest风格的测试用例,pytest-django也会自动处理Django的测试环境初始化。

内容的提问来源于stack exchange,提问作者Fenn-CS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:40