Skip to content

Commit 3e7fa5c

Browse files
author
Wolfgang Maier
committed
report successfully installed versions of requirements even if existing installations have been ignored
1 parent 67f534d commit 3e7fa5c

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

pip/commands/install.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
InstallationError, CommandError, PreviousBuildDirError,
1919
)
2020
from pip import cmdoptions
21-
from pip.utils import ensure_dir
21+
from pip.utils import ensure_dir, get_installed_version
2222
from pip.utils.build import BuildDirectory
2323
from pip.utils.deprecation import RemovedInPip10Warning
2424
from pip.utils.filesystem import check_path_owner
@@ -316,16 +316,24 @@ def run(self, options, args):
316316
root=options.root_path,
317317
prefix=options.prefix_path,
318318
)
319+
320+
possible_lib_locations = get_lib_location_guesses(
321+
user=options.use_user_site,
322+
home=temp_target_dir,
323+
prefix=options.prefix_path
324+
)
319325
reqs = sorted(
320326
requirement_set.successfully_installed,
321327
key=operator.attrgetter('name'))
322328
items = []
323329
for req in reqs:
324330
item = req.name
325331
try:
326-
if hasattr(req, 'installed_version'):
327-
if req.installed_version:
328-
item += '-' + req.installed_version
332+
installed_version = get_installed_version(
333+
req.name, possible_lib_locations
334+
)
335+
if installed_version:
336+
item += '-' + installed_version
329337
except Exception:
330338
pass
331339
items.append(item)
@@ -384,3 +392,10 @@ def run(self, options, args):
384392
)
385393
shutil.rmtree(temp_target_dir)
386394
return requirement_set
395+
396+
397+
def get_lib_location_guesses(user=False, home=None, root=None, prefix=None):
398+
scheme = distutils_scheme(
399+
'', user=user, home=home, root=root, prefix=prefix
400+
)
401+
return [scheme['purelib'], scheme['platlib']]

pip/utils/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -838,14 +838,17 @@ def __get__(self, obj, cls):
838838
return value
839839

840840

841-
def get_installed_version(dist_name):
841+
def get_installed_version(dist_name, lookup_dirs=None):
842842
"""Get the installed version of dist_name avoiding pkg_resources cache"""
843843
# Create a requirement that we'll look for inside of setuptools.
844844
req = pkg_resources.Requirement.parse(dist_name)
845845

846846
# We want to avoid having this cached, so we need to construct a new
847847
# working set each time.
848-
working_set = pkg_resources.WorkingSet()
848+
if lookup_dirs is None:
849+
working_set = pkg_resources.WorkingSet()
850+
else:
851+
working_set = pkg_resources.WorkingSet(lookup_dirs)
849852

850853
# Get the installed distribution from our working set
851854
dist = working_set.find(req)

0 commit comments

Comments
 (0)