已定义DJANGO_SETTINGS_MODULE,通过`python manage.py`导入项目设置,但django-pytest未找到django设置

1 投票
2 回答
2383 浏览
提问于 2025-04-19 09:14

问题概述:

我想用django-pytest来测试我的django脚本,但py.test却说找不到DJANGO_MODULE_SETTINGS。我按照django-pytest的文档设置了DJANGO_MODULE_SETTINGS,但py.test的表现并没有我预期的那样。

我希望能有人帮我解决这个问题。提前谢谢你们。

参考资料—django-pytest文档

在virtualenv的postactivate脚本中设置DJANGO_SETTINGS_MODULE:

  1. 在一个新的命令行窗口中,$DJANGO_SETTINGS_MODULE没有被设置。

    我本来以为$DJANGO_SETTINGS_MODULE会是None,结果确实是。

       In: echo $DJANGO_SETTINGS_MODULE
       Out:
    
  2. 内容来自.virtualenv/browsing/bin/postactivate

    根据django-pytest的文档,可以通过在virtualenv的postactivate脚本中导出它来设置$DJANGO_SETTINGS_MODULE。

    export DJANGO_SETTINGS_MODULE=automated_browsing.settings
    
  3. 在终端命令行中:

    果然,$DJANGO_SETTING_MODULE被定义了。

    # activate the virtualenv
    In: workon browsing
    In: echo $DJANGO_SETTINGS_MODULE
    Out: automated_browsing.settings 
    

    当服务器运行时,设置模块如预期那样被设置:

     # cd into django project
     In: cd ../my_django/automated_browsing
     # see if server runs
     In: python manage.py runserver
     Out: # output
       Validating models...
    
       0 errors found
       September 02, 2014 - 10:45:35
       Django version 1.6.6, using settings 'automated_browsing.settings'
       Starting development server at http://127.0.0.1:8000/
       Quit the server with CONTROL-C.
     In: ^C
    

    但出乎意料的是,py.test找不到它。

       In: echo $DJANGO_SETTINGS_MODULE
       Out: automated_browsing.settings
       In: py.test tests/test_browser.py
       Out: …
        _pytest.config.UsageError: Could not import settings 
       'automated_browsing.settings'
       (Is it on sys.path? Is there an import error in the settings file?)
       No module named automated_browsing.settings
    

已安装的包

  1. Django==1.6.6
  2. EasyProcess==0.1.6
  3. PyVirtualDisplay==0.1.5
  4. South==1.0
  5. argparse==1.2.1
  6. ipython==2.2.0
  7. lxml==3.3.6
  8. psycopg2==2.5.4
  9. py==1.4.23
  10. pytest-django==2.6.2
  11. pytest==2.6.1
  12. selenium==2.42.1
  13. test-pkg==0.0
  14. wsgiref==0.1.2

2 个回答

0

受到这个回答的启发,我解决了我的问题。

根据django-pytest的文档,关于如何管理Python路径:

默认情况下,pytest-django会通过自动查找项目的manage.py文件来寻找Django项目,并将其所在的目录添加到Python路径中。

我原以为在包含manage.py的Django项目中执行py.test tests/test_browser.py就能自动处理PYTHONPATH,但在我的情况下,这个想法是错误的。

于是我在.virtualenv/$PROJECT/bin/postactivate中添加了以下内容:

export PYTHONPATH=$PYTHONPATH:$HOME/development/my_python/my_django/automated_browsing

现在,py.test按预期工作了。

1

今天我也遇到了同样的问题。在项目的设置文件夹里,你需要创建一个init.py文件。这样Django才能识别这个文件夹。

我一开始输入的是__inti__.py,这是错误的。我把inti.py改成了init.py,结果就正常了。

希望这能帮到你。
V.

撰写回答