No pyproject.toml, nothing installed: installed: # empty expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) result: 0 Nothing installed yet: installed: # empty pyproject.toml: | # empty expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) result: 0 Insufficient version of setuptools: installed: setuptools: 5 wheel: 1 pyproject.toml: | # empty expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) result: 0 Empty pyproject.toml, empty setup.py: installed: setuptools: 50 wheel: 1 setup.py: | expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) result: 0 Default build system, empty setup.py: installed: setuptools: 50 wheel: 1 pyproject.toml: | # empty setup.py: | expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) result: 0 Erroring setup.py: installed: setuptools: 50 wheel: 1 setup.py: | exit(77) result: 77 Bad character in version: installed: {} pyproject.toml: | [build-system] requires = ["pkg == 0.$.^.*"] except: ValueError Build system dependencies in pyproject.toml: installed: setuptools: 50 wheel: 1 pyproject.toml: | [build-system] requires = [ "foo", "ne!=1", "ge>=1.2", "le <= 1.2.3", "lt < 1.2.3.4 ", " gt > 1.2.3.4.5", "combo >2, <5, != 3.0.0", "invalid!!ignored", "py2 ; python_version < '2.7'", "py3 ; python_version > '3.0'", "pkg [extra-currently-ignored]", ] expected: | python3dist(foo) (python3dist(ne) < 1 or python3dist(ne) > 1.0) python3dist(ge) >= 1.2 python3dist(le) <= 1.2.3 python3dist(lt) < 1.2.3.4 python3dist(gt) > 1.2.3.4.5 ((python3dist(combo) < 3 or python3dist(combo) > 3.0) and python3dist(combo) < 5 and python3dist(combo) > 2) python3dist(py3) python3dist(pkg) python3dist(setuptools) >= 40.8 python3dist(wheel) result: 0 Default build system, build dependencies in setup.py: installed: setuptools: 50 wheel: 1 setup.py: | from setuptools import setup setup( name='test', version='0.1', setup_requires=['foo', 'bar!=2'], install_requires=['inst'], ) expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) python3dist(foo) (python3dist(bar) < 2 or python3dist(bar) > 2.0) result: 0 Default build system, run dependencies in setup.py: installed: setuptools: 50 wheel: 1 pyyaml: 1 include_runtime: true setup.py: | from setuptools import setup setup( name='test', version='0.1', setup_requires=['pyyaml'], # nb. setuptools will try to install this install_requires=['inst > 1', 'inst2 < 3'], ) expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) python3dist(pyyaml) python3dist(inst) > 1 python3dist(inst2) < 3 result: 0 Run dependencies with extras (not selected): installed: setuptools: 50 wheel: 1 pyyaml: 1 include_runtime: true setup.py: &pytest_setup_py | # slightly abriged copy of pytest's setup.py from setuptools import setup INSTALL_REQUIRES = [ "py>=1.5.0", "six>=1.10.0", "setuptools", "attrs>=17.4.0", 'more-itertools>=4.0.0,<6.0.0;python_version<="2.7"', 'more-itertools>=4.0.0;python_version>"2.7"', "atomicwrites>=1.0", 'funcsigs>=1.0;python_version<"3.0"', 'pathlib2>=2.2.0;python_version<"3.6"', 'colorama;sys_platform=="win32"', "pluggy>=0.11", ] def main(): setup( setup_requires=["setuptools>=40.0"], # fmt: off extras_require={ "testing": [ "argcomplete", "hypothesis>=3.56", "nose", "requests", "mock;python_version=='2.7'", ], }, # fmt: on install_requires=INSTALL_REQUIRES, ) if __name__ == "__main__": main() expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) python3dist(setuptools) >= 40 python3dist(py) >= 1.5 python3dist(six) >= 1.10 python3dist(setuptools) python3dist(attrs) >= 17.4 python3dist(atomicwrites) >= 1 python3dist(pluggy) >= 0.11 python3dist(more-itertools) >= 4 result: 0 Run dependencies with extras (selected): installed: setuptools: 50 wheel: 1 pyyaml: 1 include_runtime: true extras: testing setup.py: *pytest_setup_py expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) python3dist(setuptools) >= 40 python3dist(py) >= 1.5 python3dist(six) >= 1.10 python3dist(setuptools) python3dist(attrs) >= 17.4 python3dist(atomicwrites) >= 1 python3dist(pluggy) >= 0.11 python3dist(more-itertools) >= 4 python3dist(argcomplete) python3dist(hypothesis) >= 3.56 python3dist(nose) python3dist(requests) result: 0 Run dependencies with multiple extras: xfail: requirement.marker.evaluate seems to not support multiple extras installed: setuptools: 50 wheel: 1 pyyaml: 1 include_runtime: true extras: testing,more-testing, even-more-testing , cool-feature setup.py: | from setuptools import setup setup( extras_require={ 'testing': ['dep1'], 'more-testing': ['dep2'], 'even-more-testing': ['dep3'], 'cool-feature': ['dep4'], }, ) expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(dep1) python3dist(dep2) python3dist(dep3) python3dist(dep4) result: 0 Tox dependencies: installed: setuptools: 50 wheel: 1 tox: 3.5.3 tox-current-env: 0.0.2 toxenv: py3 setup.py: | from setuptools import setup setup( name='test', version='0.1', install_requires=['inst'], ) tox.ini: | [tox] envlist = py36,py37,py38 [testenv] deps = toxdep1 toxdep2 commands = true expected: | python3dist(setuptools) >= 40.8 python3dist(wheel) python3dist(wheel) python3dist(tox-current-env) >= 0.0.2 python3dist(toxdep1) python3dist(toxdep2) python3dist(inst) result: 0