82

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

我的问题是tox需要 a setup.py,但我没有,因为我的应用程序不是模块并且有自己的安装程序。现在我不想经历自动化安装过程的麻烦setup.py,我只想运行我的单元测试而不必编写一个setup.py.

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

4

4 回答 4

96

在深入研究了源代码之后,我在 tox.ini 中发现了一个几乎没有记录的选项,它跳过了 sdist:

[tox]
skipsdist = BOOL    # defaults to false

将此设置为True我得到了我想要的,节省了我编写有意义的工作setup.py

于 2013-09-24T15:04:28.347 回答
58

如果您有一个应用程序(带有 a requirements.txt),而不是您要分发的项目(它将有 asetup.py代替),您tox.ini应该看起来像这样:

[tox]
skipsdist = True

[testenv]
deps = -r{toxinidir}/requirements.txt

最初从 David Murphy 的博客中找到了这个答案,但该页面不再可用,您可以在此处找到存档版本:https ://web.archive.org/web/20150112223937/https://blog.schwuk.com/2014 /03/19/使用-tox-django-projects/

(原始链接,现已失效:http: //blog.schwuk.com/2014/03/19/using-tox-django-projects/

于 2014-11-14T20:13:11.203 回答
2

这是我tox.ini通过多个设置为 Django 项目提供的文件内容:

[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
于 2018-03-12T08:53:45.873 回答
1

我还必须usedevelop = true从我的 conf 中删除。

我的配置是这样的:

[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也可以解决问题。

于 2020-07-23T14:16:04.893 回答