Skip to content

Commit 1aa5e6a

Browse files
authored
Merge pull request #3723 from wm75/mimodd_master
Report successfully installed versions of requirements even if existing installations have been ignored
2 parents 8df742e + e568adc commit 1aa5e6a

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

pip/commands/install.py

+19-4
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
@@ -341,16 +341,26 @@ def run(self, options, args):
341341
root=options.root_path,
342342
prefix=options.prefix_path,
343343
)
344+
345+
possible_lib_locations = get_lib_location_guesses(
346+
user=options.use_user_site,
347+
home=temp_target_dir,
348+
root=options.root_path,
349+
prefix=options.prefix_path,
350+
isolated=options.isolated_mode,
351+
)
344352
reqs = sorted(
345353
requirement_set.successfully_installed,
346354
key=operator.attrgetter('name'))
347355
items = []
348356
for req in reqs:
349357
item = req.name
350358
try:
351-
if hasattr(req, 'installed_version'):
352-
if req.installed_version:
353-
item += '-' + req.installed_version
359+
installed_version = get_installed_version(
360+
req.name, possible_lib_locations
361+
)
362+
if installed_version:
363+
item += '-' + installed_version
354364
except Exception:
355365
pass
356366
items.append(item)
@@ -420,3 +430,8 @@ def run(self, options, args):
420430
)
421431
shutil.rmtree(temp_target_dir)
422432
return requirement_set
433+
434+
435+
def get_lib_location_guesses(*args, **kwargs):
436+
scheme = distutils_scheme('', *args, **kwargs)
437+
return [scheme['purelib'], scheme['platlib']]

pip/utils/__init__.py

+5-2
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)