我要怎么在一个没有安装的项目里做毒理检测?

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

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

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

15751 次浏览

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

[tox]
skipsdist = BOOL    # defaults to false

设置为 True我得到了我想要的,节省了我的努力,写一个有意义的 setup.py

如果您有一个应用程序(使用 requirements.txt) ,而不是您将要发布的项目(将使用 setup.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/using-tox-django-projects/

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

这是我的 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

我还必须从 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也起到了作用。