Commit d92f778b authored by Jason R. Coombs's avatar Jason R. Coombs

Rewrite selective PIP_IGNORE_REQUIRES_PYTHON to allow test dependencies in...

Rewrite selective PIP_IGNORE_REQUIRES_PYTHON to allow test dependencies in metadata to be installed without ignoring REQUIRES_PYTHON
parent 6d4e2388
......@@ -12,6 +12,17 @@ from .textwrap import DALS
from .test_easy_install import make_nspkg_sdist
@pytest.fixture(autouse=True)
def disable_requires_python(monkeypatch):
"""
Disable Requires-Python on Python 2.7
"""
if sys.version_info > (3,):
return
monkeypatch.setenv('PIP_IGNORE_REQUIRES_PYTHON', 'true')
@pytest.fixture(autouse=True)
def pytest_virtualenv_works(virtualenv):
"""
......
......@@ -38,18 +38,43 @@ def is_install_self(args):
)
def pip(args):
# Honor requires-python when installing test suite dependencies
if any('-r' in arg for arg in args):
os.environ['PIP_IGNORE_REQUIRES_PYTHON'] = '0'
def pip(*args):
cmd = [sys.executable, '-m', 'pip'] + list(args)
return subprocess.check_call(cmd)
def test_dependencies():
from ConfigParser import ConfigParser
def clean(dep):
spec, _, _ = dep.partition('#')
return spec.strip()
parser = ConfigParser()
parser.read('setup.cfg')
raw = parser.get('options.extras_require', 'tests').split('\n')
return filter(None, map(clean, raw))
def disable_python_requires():
"""
On Python 2, install the dependencies that are selective
on Python version while honoring REQUIRES_PYTHON, then
disable REQUIRES_PYTHON so that pip can install this
checkout of setuptools.
"""
pip('install', *test_dependencies())
os.environ['PIP_IGNORE_REQUIRES_PYTHON'] = 'true'
def run(args):
if is_install_self(args):
remove_setuptools()
bootstrap()
sys.version_info > (3,) or disable_python_requires()
cmd = [sys.executable, '-m', 'pip'] + args
subprocess.check_call(cmd)
pip(*args)
if __name__ == '__main__':
pip(sys.argv[1:])
run(sys.argv[1:])
......@@ -18,7 +18,6 @@ install_command = {[helpers]pip} install {opts} {packages}
list_dependencies_command = {[helpers]pip} freeze --all
setenv =
COVERAGE_FILE={toxworkdir}/.coverage.{envname}
py27: PIP_IGNORE_REQUIRES_PYTHON=true
# TODO: The passed environment variables came from copying other tox.ini files
# These should probably be individually annotated to explain what needs them.
passenv=APPDATA HOMEDRIVE HOMEPATH windir APPVEYOR APPVEYOR_* CI CODECOV_* TRAVIS TRAVIS_* NETWORK_REQUIRED
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment