Как запустить tox в проекте, у которого нет setup.py?

Я хотел бы использовать tox для запуска моих модульных тестов в двух виртуальных средах, поскольку мое приложение должно поддерживать 2 разные версии Python.

Моя проблема в том, что tox требуется setup.py, но у меня его нет, поскольку мое приложение не является модулем и имеет собственный установщик. На данный момент я не хочу мучиться с автоматизацией процесса установки для работы с setup.py, я просто хочу запускать свои модульные тесты без необходимости писать setup.py.

Это возможно? Или как я могу написать «пустой» setup.py, который просто ничего не делает? Не могли бы вы указать мне на какую-нибудь документацию по этому вопросу (в distutils документации объясняется, как написать значимый setup.py, а не пустой)?


person Kjir    schedule 23.09.2013    source источник


Ответы (4)


Покопавшись в исходном коде, я нашел в tox.ini едва задокументированную опцию, которая пропускает sdist:

[tox]
skipsdist = BOOL    # defaults to false

Установив для этого параметра значение True, я получил то, что хотел, избавив меня от необходимости писать осмысленное setup.py

person Kjir    schedule 24.09.2013
comment
И каков ваш tox.ini код, который на самом деле запускает тесты? - person linkyndy; 28.10.2013
comment
Мои тесты содержат тесты на нос: commands = nosetests {posargs} - person Kjir; 31.10.2013
comment
Я запускаю свои тесты Django с python manage.py test, поэтому setup.py там тоже не нужен. Спасибо за совет. - person David Reynolds; 14.05.2014

Если у вас есть приложение (с requirements.txt), а не проект, который вы собираетесь распространять (вместо него будет setup.py), ваш tox.ini должен выглядеть примерно так:

[tox]
skipsdist = True

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

Нашел этот ответ первоначально из блога Дэвида Мерфи, но страница больше не доступна, вы можете найти заархивированную версию здесь: 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/)

person Ceasar Bautista    schedule 14.11.2014
comment
Если вы собираетесь это сделать, вы также можете установить PYTHONPATH, для этого просто выполните setenv = # newline PYTHONPATH = . в [testenv] - person ZN13; 09.08.2017
comment
Форматирование комментариев SO может сначала сбить с толку при передаче того, что нам говорит @ ZN13. См. stackoverflow.com/a/47339689/1877509 о том, как это выглядит в tox.ini файле. - person Axel Advento; 19.03.2021

Это содержимое моего 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
person M.javid    schedule 12.03.2018

Мне также пришлось удалить 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 помогло.

person vinzee    schedule 23.07.2020