如何在没有setup.py的项目中运行tox?

时间:2013-09-23 14:50:46

标签: python unit-testing distutils tox

我想使用tox在两个virtualenvs中运行我的单元测试,因为我的应用程序必须支持2个不同的Python版本。

我的问题是tox需要setup.py,但我没有,因为我的应用程序不是模块并且有自己的安装程序。现在,我不想轻松自动执行安装过程以使用setup.py,我只想运行我的单元测试而无需编写setup.py

这可能吗?或者我怎么能写一个“空”的setup.py,什么都不做?您能否指出我关于该主题的一些文档(distutils文档解释了如何编写有意义的setup.py,而不是空文本?

4 个答案:

答案 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