Я хочу разделить зависимости пакета Python на setup_requires
и tests_require
, чтобы обеспечить чистое разделение зависимостей.
Для запуска тестовой команды требуется, чтобы в среду было установлено несколько консольных сценариев (flake8
, mypy
, nosetests
). Они перечислены как зависимости в test_requires
.
Когда я запускаю python setup.py test
, требования в tests_require
загружаются как яйца, но консольные сценарии, которые обычно устанавливаются в вашей виртуальной среде, недоступны.
Таким образом, команды тестирования не выполняются, так как flake8
и т. Д. Недоступны.
Есть ли способ обойти это?
Это очень похоже на Указание, куда устанавливать зависимости 'tests_require' пакета distre / setuptools , но не идентично; поскольку мне не особо важно, где установлены пакеты, доступны только те консольные сценарии, которые предоставляются этими пакетами.
Единственный найденный мной обходной путь - это расширение setup_requires
содержимым tests_require
, но это противоречит цели отделения требований только для тестирования от требований для установки пакета.
Пример setup.py
, который может воспроизвести это:
import subprocess
import sys
from setuptools import setup
from setuptools.command.test import test as TestCommand
install_requires = ["flask", "gunicorn"]
tests_require = ["flake8", "mypy", "nose"]
# Uncommenting this fixes the problem, but is not optimal
# install_requires += tests_require
class FooTests(TestCommand):
description = "run linters, and tests"
def run_tests(self):
self._run(["flake8", "tests", "my_package"])
self._run(["mypy", "--ignore-missing-imports", "my_package"])
self._run(["nosetests", "-vv"])
def _run(self, command):
subprocess.check_call(command)
setup(
name="my_package",
version="1.0",
description="Example package",
packages=["my_package"],
install_requires=install_requires,
tests_require=tests_require,
cmdclass={"test": FooTests},
)