我想使用tox
在两个virtualenvs中运行我的单元测试,因为我的应用程序必须支持2个不同的Python版本。
我的问题是tox
需要setup.py
,但我没有,因为我的应用程序不是模块并且有自己的安装程序。现在,我不想轻松自动执行安装过程以使用setup.py
,我只想运行我的单元测试而无需编写setup.py
。
这可能吗?或者我怎么能写一个“空”的setup.py,什么都不做?您能否指出我关于该主题的一些文档(distutils
文档解释了如何编写有意义的setup.py
,而不是空文本?
答案 0 :(得分:79)
在挖掘源代码后,我在tox.ini中发现了一个几乎没有记录的选项,它跳过了sdist:
[tox]
skipsdist = BOOL # defaults to false
将此设置为True
我得到了我想要的东西,为我节省了写一篇有意义的setup.py
答案 1 :(得分:39)
如果你有一个应用程序(requirements.txt
),而不是你要分发的项目(而不是setup.py
),你的tox.ini
应该看起来像什么像这样:
[tox]
skipsdist = True
[testenv]
deps = -r{toxinidir}/requirements.txt
发现这个答案最初来自David Murphy的博客:http://blog.schwuk.com/2014/03/19/using-tox-django-projects/
答案 2 :(得分:1)
我还必须从conf中删除usedevelop = true
。
我的配置看起来像这样:
[tox]
envlist = flake8,py36
[testenv]
usedevelop = true
install_command = pip install -U {opts} {packages}
deps =
py36: -r requirements.txt
py36: -r requirements-test.txt
flake8: flake8
commands=
flake8: flake8 app tests --ignore=E501,W503
py36: pytest {toxinidir}/tests {posargs}
我添加了skipsdist = true
作为其他答案。但这还不够。如上所述,同样删除usedevelop = true
也可以解决问题。
答案 3 :(得分:0)
这是我的多个设置的Django项目的tox.ini文件内容:
[tox]
envlist = py36-{accounting,content,media}_settings
skipsdist = true
[testenv]
commands = python {toxinidir}/manage.py test
deps = -r{toxinidir}/requirements.txt
setenv =
accounting_settings: DJANGO_SETTINGS_MODULE=my_project.settings.accounting
contents_settings: DJANGO_SETTINGS_MODULE=my_project.settings.contents
media_settings: DJANGO_SETTINGS_MODULE=my_project.settings.media