Fix pip not detecting package installed

This commit is contained in:
Paulus Schoutsen 2015-09-16 23:12:38 -07:00
parent 3c3eadbef5
commit 4ad4d74ed4

View file

@ -1,6 +1,6 @@
"""Helpers to install PyPi packages.""" """Helpers to install PyPi packages."""
import os
import logging import logging
import os
import pkg_resources import pkg_resources
import subprocess import subprocess
import sys import sys
@ -15,25 +15,24 @@ def install_package(package, upgrade=True, target=None):
"""Install a package on PyPi. Accepts pip compatible package strings. """Install a package on PyPi. Accepts pip compatible package strings.
Return boolean if install successfull.""" Return boolean if install successfull."""
# Not using 'import pip; pip.main([])' because it breaks the logger # Not using 'import pip; pip.main([])' because it breaks the logger
args = [sys.executable, '-m', 'pip', 'install', '--quiet', package]
if upgrade:
args.append('--upgrade')
if target:
args += ['--target', os.path.abspath(target)]
with INSTALL_LOCK: with INSTALL_LOCK:
if check_package_exists(package, target): if check_package_exists(package, target):
return True return True
_LOGGER.info('Attempting install of %s', package) _LOGGER.info('Attempting install of %s', package)
args = [sys.executable, '-m', 'pip', 'install', '--quiet', package]
if upgrade:
args.append('--upgrade')
if target:
args += ['--target', os.path.abspath(target)]
try: try:
return 0 == subprocess.call(args) return 0 == subprocess.call(args)
except subprocess.SubprocessError: except subprocess.SubprocessError:
return False return False
def check_package_exists(package, target=None): def check_package_exists(package, target):
"""Check if a package exists. """Check if a package exists.
Returns True when the requirement is met. Returns True when the requirement is met.
Returns False when the package is not installed or doesn't meet req.""" Returns False when the package is not installed or doesn't meet req."""
@ -43,16 +42,5 @@ def check_package_exists(package, target=None):
# This is a zip file # This is a zip file
req = pkg_resources.Requirement.parse(urlparse(package).fragment) req = pkg_resources.Requirement.parse(urlparse(package).fragment)
if target: return any(dist in req for dist in
work_set = pkg_resources.WorkingSet([target]) pkg_resources.find_distributions(target))
search_fun = work_set.find
else:
search_fun = pkg_resources.get_distribution
try:
result = search_fun(req)
except (pkg_resources.DistributionNotFound, pkg_resources.VersionConflict):
return False
return bool(result)