繁体   English   中英

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

[英]How do I run tox in a project that has no setup.py?

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

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

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

在深入研究源代码后,我在 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/

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

我还必须从我的 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也能解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM