diff --git a/pip/commands/install.py b/pip/commands/install.py index 20b54b9e55f..f59c488b1a5 100644 --- a/pip/commands/install.py +++ b/pip/commands/install.py @@ -256,89 +256,96 @@ def run(self, options, args): "cache." ) - session = self._build_session(options) - - finder = self._build_package_finder(options, index_urls, session) - - requirement_set = RequirementSet( - build_dir=options.build_dir, - src_dir=options.src_dir, - download_dir=options.download_dir, - upgrade=options.upgrade, - as_egg=options.as_egg, - ignore_installed=options.ignore_installed, - ignore_dependencies=options.ignore_dependencies, - force_reinstall=options.force_reinstall, - use_user_site=options.use_user_site, - target_dir=temp_target_dir, - session=session, - pycompile=options.compile, - ) - for name in args: - requirement_set.add_requirement( - InstallRequirement.from_line(name, None)) - for name in options.editables: - requirement_set.add_requirement( - InstallRequirement.from_editable( - name, - default_vcs=options.default_vcs - ) + with self._build_session(options) as session: + + finder = self._build_package_finder(options, index_urls, session) + + requirement_set = RequirementSet( + build_dir=options.build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + upgrade=options.upgrade, + as_egg=options.as_egg, + ignore_installed=options.ignore_installed, + ignore_dependencies=options.ignore_dependencies, + force_reinstall=options.force_reinstall, + use_user_site=options.use_user_site, + target_dir=temp_target_dir, + session=session, + pycompile=options.compile, ) - for filename in options.requirements: - for req in parse_requirements( - filename, finder=finder, options=options, session=session): - requirement_set.add_requirement(req) - if not requirement_set.has_requirements: - opts = {'name': self.name} - if options.find_links: - msg = ('You must give at least one requirement to %(name)s ' - '(maybe you meant "pip %(name)s %(links)s"?)' % - dict(opts, links=' '.join(options.find_links))) - else: - msg = ('You must give at least one requirement ' - 'to %(name)s (see "pip help %(name)s")' % opts) - logger.warn(msg) - return - - try: - if not options.no_download: - requirement_set.prepare_files(finder) - else: - requirement_set.locate_files() - - if not options.no_install: - requirement_set.install( - install_options, - global_options, - root=options.root_path, - ) - installed = ' '.join([req.name for req in - requirement_set.successfully_installed]) - if installed: - logger.notify('Successfully installed %s' % installed) - else: - downloaded = ' '.join([ - req.name for req in requirement_set.successfully_downloaded - ]) - if downloaded: - logger.notify('Successfully downloaded %s' % downloaded) - except PreviousBuildDirError: - options.no_clean = True - raise - finally: - # Clean up - if ((not options.no_clean) - and ((not options.no_install) or options.download_dir)): - requirement_set.cleanup_files() - - if options.target_dir: - if not os.path.exists(options.target_dir): - os.makedirs(options.target_dir) - lib_dir = distutils_scheme('', home=temp_target_dir)['purelib'] - for item in os.listdir(lib_dir): - shutil.move( - os.path.join(lib_dir, item), - os.path.join(options.target_dir, item), + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name, None)) + for name in options.editables: + requirement_set.add_requirement( + InstallRequirement.from_editable( + name, + default_vcs=options.default_vcs + ) ) - shutil.rmtree(temp_target_dir) - return requirement_set + for filename in options.requirements: + for req in parse_requirements( + filename, + finder=finder, options=options, session=session): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + opts = {'name': self.name} + if options.find_links: + msg = ('You must give at least one requirement to %(name)s' + ' (maybe you meant "pip %(name)s %(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.warn(msg) + return + + try: + if not options.no_download: + requirement_set.prepare_files(finder) + else: + requirement_set.locate_files() + + if not options.no_install: + requirement_set.install( + install_options, + global_options, + root=options.root_path, + ) + installed = ' '.join([ + req.name for req in + requirement_set.successfully_installed + ]) + if installed: + logger.notify('Successfully installed %s' % installed) + else: + downloaded = ' '.join([ + req.name + for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.notify( + 'Successfully downloaded %s' % downloaded + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if ((not options.no_clean) + and ((not options.no_install) + or options.download_dir)): + requirement_set.cleanup_files() + + if options.target_dir: + if not os.path.exists(options.target_dir): + os.makedirs(options.target_dir) + lib_dir = distutils_scheme('', home=temp_target_dir)['purelib'] + for item in os.listdir(lib_dir): + shutil.move( + os.path.join(lib_dir, item), + os.path.join(options.target_dir, item), + ) + shutil.rmtree(temp_target_dir) + return requirement_set diff --git a/pip/commands/list.py b/pip/commands/list.py index 3a0330a9c0f..f1eceffabb4 100644 --- a/pip/commands/list.py +++ b/pip/commands/list.py @@ -115,35 +115,35 @@ def find_packages_latests_versions(self, options): ) index_urls += options.mirrors - session = self._build_session(options) + with self._build_session(options) as session: + finder = self._build_package_finder(options, index_urls, session) - finder = self._build_package_finder(options, index_urls, session) - - installed_packages = get_installed_distributions( - local_only=options.local, - include_editables=False, - ) - for dist in installed_packages: - req = InstallRequirement.from_line(dist.key, None) - try: - link = finder.find_requirement(req, True) - - # If link is None, means installed version is most up-to-date - if link is None: + installed_packages = get_installed_distributions( + local_only=options.local, + include_editables=False, + ) + for dist in installed_packages: + req = InstallRequirement.from_line(dist.key, None) + try: + link = finder.find_requirement(req, True) + + # If link is None, means installed version is most + # up-to-date + if link is None: + continue + except DistributionNotFound: continue - except DistributionNotFound: - continue - except BestVersionAlreadyInstalled: - remote_version = req.installed_version - else: - # It might be a good idea that link or finder had a public - # method that returned version - remote_version = finder._link_package_versions( - link, req.name - )[0] - remote_version_raw = remote_version[2] - remote_version_parsed = remote_version[0] - yield dist, remote_version_raw, remote_version_parsed + except BestVersionAlreadyInstalled: + remote_version = req.installed_version + else: + # It might be a good idea that link or finder had a public + # method that returned version + remote_version = finder._link_package_versions( + link, req.name + )[0] + remote_version_raw = remote_version[2] + remote_version_parsed = remote_version[0] + yield dist, remote_version_raw, remote_version_parsed def run_listing(self, options): installed_packages = get_installed_distributions( diff --git a/pip/commands/uninstall.py b/pip/commands/uninstall.py index 3d81a307eed..b9e4c70aaa6 100644 --- a/pip/commands/uninstall.py +++ b/pip/commands/uninstall.py @@ -39,26 +39,26 @@ def __init__(self, *args, **kw): self.parser.insert_option_group(0, self.cmd_opts) def run(self, options, args): - session = self._build_session(options) + with self._build_session(options) as session: - requirement_set = RequirementSet( - build_dir=None, - src_dir=None, - download_dir=None, - session=session, - ) - for name in args: - requirement_set.add_requirement( - InstallRequirement.from_line(name)) - for filename in options.requirements: - for req in parse_requirements( - filename, - options=options, - session=session): - requirement_set.add_requirement(req) - if not requirement_set.has_requirements: - raise InstallationError( - 'You must give at least one requirement to %(name)s (see "pip ' - 'help %(name)s")' % dict(name=self.name) + requirement_set = RequirementSet( + build_dir=None, + src_dir=None, + download_dir=None, + session=session, ) - requirement_set.uninstall(auto_confirm=options.yes) + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name)) + for filename in options.requirements: + for req in parse_requirements( + filename, + options=options, + session=session): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + raise InstallationError( + 'You must give at least one requirement to %(name)s (see ' + '"pip help %(name)s")' % dict(name=self.name) + ) + requirement_set.uninstall(auto_confirm=options.yes) diff --git a/pip/commands/wheel.py b/pip/commands/wheel.py index ebc724f8a43..6f43faa892b 100644 --- a/pip/commands/wheel.py +++ b/pip/commands/wheel.py @@ -152,75 +152,75 @@ def run(self, options, args): "cache." ) - session = self._build_session(options) - - finder = PackageFinder( - find_links=options.find_links, - index_urls=index_urls, - use_wheel=options.use_wheel, - allow_external=options.allow_external, - allow_unverified=options.allow_unverified, - allow_all_external=options.allow_all_external, - allow_all_prereleases=options.pre, - session=session, - ) - - options.build_dir = os.path.abspath(options.build_dir) - requirement_set = RequirementSet( - build_dir=options.build_dir, - src_dir=options.src_dir, - download_dir=None, - ignore_dependencies=options.ignore_dependencies, - ignore_installed=True, - session=session, - wheel_download_dir=options.wheel_dir - ) - - # make the wheelhouse - if not os.path.exists(options.wheel_dir): - os.makedirs(options.wheel_dir) - - # parse args and/or requirements files - for name in args: - requirement_set.add_requirement( - InstallRequirement.from_line(name, None)) - for name in options.editables: - requirement_set.add_requirement( - InstallRequirement.from_editable( - name, - default_vcs=options.default_vcs - ) + with self._build_session(options) as session: + + finder = PackageFinder( + find_links=options.find_links, + index_urls=index_urls, + use_wheel=options.use_wheel, + allow_external=options.allow_external, + allow_unverified=options.allow_unverified, + allow_all_external=options.allow_all_external, + allow_all_prereleases=options.pre, + session=session, ) - for filename in options.requirements: - for req in parse_requirements( - filename, - finder=finder, - options=options, - session=session): - requirement_set.add_requirement(req) - - # fail if no requirements - if not requirement_set.has_requirements: - opts = {'name': self.name} - msg = ('You must give at least one requirement ' - 'to %(name)s (see "pip help %(name)s")' % opts) - logger.error(msg) - return - try: - # build wheels - wb = WheelBuilder( - requirement_set, - finder, - options.wheel_dir, - build_options=options.build_options or [], - global_options=options.global_options or [], + options.build_dir = os.path.abspath(options.build_dir) + requirement_set = RequirementSet( + build_dir=options.build_dir, + src_dir=options.src_dir, + download_dir=None, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=True, + session=session, + wheel_download_dir=options.wheel_dir ) - if not wb.build(): - raise CommandError("Failed to build one or more wheels") - except PreviousBuildDirError: - options.no_clean = True - raise - finally: - if not options.no_clean: - requirement_set.cleanup_files() + + # make the wheelhouse + if not os.path.exists(options.wheel_dir): + os.makedirs(options.wheel_dir) + + # parse args and/or requirements files + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name, None)) + for name in options.editables: + requirement_set.add_requirement( + InstallRequirement.from_editable( + name, + default_vcs=options.default_vcs + ) + ) + for filename in options.requirements: + for req in parse_requirements( + filename, + finder=finder, + options=options, + session=session): + requirement_set.add_requirement(req) + + # fail if no requirements + if not requirement_set.has_requirements: + opts = {'name': self.name} + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.error(msg) + return + + try: + # build wheels + wb = WheelBuilder( + requirement_set, + finder, + options.wheel_dir, + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + if not wb.build(): + raise CommandError("Failed to build one or more wheels") + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files()