已定义DJANGO_SETTINGS_MODULE,通过`python manage.py`导入项目设置,但django-pytest未找到django设置
问题概述:
我想用django-pytest来测试我的django脚本,但py.test却说找不到DJANGO_MODULE_SETTINGS。我按照django-pytest的文档设置了DJANGO_MODULE_SETTINGS,但py.test的表现并没有我预期的那样。
我希望能有人帮我解决这个问题。提前谢谢你们。
参考资料—django-pytest文档
在virtualenv的postactivate脚本中设置DJANGO_SETTINGS_MODULE:
在一个新的命令行窗口中,$DJANGO_SETTINGS_MODULE没有被设置。
我本来以为$DJANGO_SETTINGS_MODULE会是None,结果确实是。
In: echo $DJANGO_SETTINGS_MODULE Out:
内容来自
.virtualenv/browsing/bin/postactivate
根据django-pytest的文档,可以通过在virtualenv的postactivate脚本中导出它来设置$DJANGO_SETTINGS_MODULE。
export DJANGO_SETTINGS_MODULE=automated_browsing.settings
在终端命令行中:
果然,$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
已安装的包
- Django==1.6.6
- EasyProcess==0.1.6
- PyVirtualDisplay==0.1.5
- South==1.0
- argparse==1.2.1
- ipython==2.2.0
- lxml==3.3.6
- psycopg2==2.5.4
- py==1.4.23
- pytest-django==2.6.2
- pytest==2.6.1
- selenium==2.42.1
- test-pkg==0.0
- wsgiref==0.1.2
2 个回答
受到这个回答的启发,我解决了我的问题。
根据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按预期工作了。
今天我也遇到了同样的问题。在项目的设置文件夹里,你需要创建一个init.py文件。这样Django才能识别这个文件夹。
我一开始输入的是__inti__.py,这是错误的。我把inti.py改成了init.py,结果就正常了。
希望这能帮到你。
V.