1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00

query installed requirements for extras

fixes issue where egg_info('requires.txt') does not exist
for packages installed from wheels.
This commit is contained in:
MinRK 2014-06-18 15:32:08 -07:00 committed by Donald Stufft
parent 3968856c60
commit c2e71e7ce6
8 changed files with 40 additions and 1 deletions

View file

@ -54,6 +54,9 @@
* Fixed :issue:`1101`. Properly handle an index or --find-links target which
has a <base> without a href attribute. (:pull:`1869`)
* Fixed :issue:`1885`. Will properly handle extras when a project is installed
via Wheel. (:pull:`1896`)
**1.5.7**

View file

@ -451,6 +451,10 @@ exec(compile(
_requirements_section_re = re.compile(r'\[(.*?)\]')
def requirements(self, extras=()):
if self.satisfied_by:
for r in self.satisfied_by.requires(extras):
yield str(r)
return
in_extra = None
for line in self.egg_info_lines('requires.txt'):
match = self._requirements_section_re.match(line.lower())

View file

@ -84,6 +84,8 @@ meta-1.0-py2.py3-none-any.whl
--------------------------------------------------
Is an empty package which install_requires the simple and simple2 packages.
requires_simple_extra-0.1-py2.py3-none-any.whl
----------------------------------------------
requires_simple_extra[extra] requires simple==1.0

View file

@ -0,0 +1,2 @@
[wheel]
universal=1

View file

@ -0,0 +1,9 @@
from setuptools import setup
setup(name='requires_simple_extra',
version='0.1',
py_modules = ['requires_simple_extra'],
extras_require = {
'extra' : ['simple==1.0']
}
)

View file

@ -12,6 +12,25 @@ def test_simple_extras_install_from_pypi(script):
assert initools_folder in result.files_created, result.files_created
def test_extras_after_wheel(script, data):
"""
Test installing a package with extras after installing from a wheel.
"""
simple = script.site_packages / 'simple'
no_extra = script.pip(
'install', '--no-index', '-f', data.find_links,
'requires_simple_extra', expect_stderr=True,
)
assert simple not in no_extra.files_created, no_extra.files_created
extra = script.pip(
'install', '--no-index', '-f', data.find_links,
'requires_simple_extra[extra]', expect_stderr=True,
)
assert simple in extra.files_created, extra.files_created
def test_no_extras_uninstall(script):
"""
No extras dependency gets uninstalled when the root package is uninstalled