From 4ad4d74ed4a572ed2762c70900bc65fd9a1ba530 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Sep 2015 23:12:38 -0700 Subject: [PATCH] Fix pip not detecting package installed --- homeassistant/util/package.py | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/homeassistant/util/package.py b/homeassistant/util/package.py index 5d32c087efe..966ecc1dcc2 100644 --- a/homeassistant/util/package.py +++ b/homeassistant/util/package.py @@ -1,6 +1,6 @@ """Helpers to install PyPi packages.""" -import os import logging +import os import pkg_resources import subprocess import sys @@ -15,25 +15,24 @@ def install_package(package, upgrade=True, target=None): """Install a package on PyPi. Accepts pip compatible package strings. Return boolean if install successfull.""" # 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: if check_package_exists(package, target): return True _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: return 0 == subprocess.call(args) except subprocess.SubprocessError: return False -def check_package_exists(package, target=None): +def check_package_exists(package, target): """Check if a package exists. Returns True when the requirement is met. 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 req = pkg_resources.Requirement.parse(urlparse(package).fragment) - if target: - work_set = pkg_resources.WorkingSet([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) + return any(dist in req for dist in + pkg_resources.find_distributions(target))