From 5f48c85d32cfeb45bc73bef928e009acfa168905 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 12 Mar 2018 07:12:14 -0400 Subject: [PATCH] got setup.py extras working (apparently) Signed-off-by: Kenneth Reitz --- pipenv/patched/piptools/repositories/pypi.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pipenv/patched/piptools/repositories/pypi.py b/pipenv/patched/piptools/repositories/pypi.py index 1576fa0d..cfd99b96 100755 --- a/pipenv/patched/piptools/repositories/pypi.py +++ b/pipenv/patched/piptools/repositories/pypi.py @@ -183,6 +183,14 @@ class PyPIRepository(BaseRepository): if not (ireq.editable or is_pinned_requirement(ireq)): raise TypeError('Expected pinned or editable InstallRequirement, got {}'.format(ireq)) + setup_requires = {} + if ireq.editable: + dist = ireq.get_dist() + if dist.has_metadata('requires.txt'): + setup_requires = self.finder.get_extras_links( + dist.get_metadata_lines('requires.txt') + ) + if ireq not in self._dependencies_cache: if ireq.link and not ireq.link.is_artifact: # No download_dir for VCS sources. This also works around pip @@ -204,6 +212,15 @@ class PyPIRepository(BaseRepository): ignore_compatibility=True ) result = reqset._prepare_file(self.finder, ireq, ignore_requires_python=True) + if setup_requires: + for section in setup_requires: + python_version = section + for value in setup_requires[section]: + if ':' in value: + python_version = value[1:-1] + else: + result = result + [InstallRequirement.from_line("{0}{1}".format(value, python_version).replace(':', ';'))] + if reqset.requires_python: marker = 'python_version=="{0}"'.format(reqset.requires_python.replace(' ', ''))