def uninstall(self): path_re = re.compile(r'\./{0}-[\d\w\.]+-py\d\.\d.egg'.format(self.name), re.I) path_re2 = re.compile(r'\.{0}'.format(self.name), re.I) to_del = self.find_files() if not to_del: logger.warn('{0}: did not find any files to delete', self.name) raise PygError logger.info('Uninstalling {0}', self.name) logger.indent += 8 for d in to_del: logger.info(d) logger.indent -= 8 do_it = logger.ask('Proceed', bool=('remove files', 'cancel'), dont_ask=args_manager['install']['yes']) if do_it: for d in to_del: try: logger.verbose('Deleting: {0}', d) shutil.rmtree(d) except OSError: ## It is not a directory try: os.remove(d) except OSError: logger.error('Error: cannot delete {0}', d) logger.verbose('Removing egg path from easy_install.pth...') with open(EASY_INSTALL) as f: lines = f.readlines() with open(EASY_INSTALL, 'w') as f: for line in lines: if path_re.match(line) or path_re2.match(line): continue f.write(line) logger.success('{0} uninstalled succesfully', self.name) else: logger.info('{0} has not been uninstalled', self.name)
def update(self): ''' Searches for updates for every package in the WorkingSet. Then calls :meth:`~pyg.inst.Updater.upgrade`. ''' logger.info('Searching for updates') for dist in self.working_set: package = dist.project_name version = Version(dist.version) logger.verbose('Found: {0}=={1}', package, version) try: json = PyPIJson(package).retrieve() new_version = Version(json['info']['version']) except Exception as e: logger.error('Error: Failed to fetch data for {0} ({1})', package, e) continue if version >= new_version: continue txt = 'A new release is avaiable for {0}: {1!s} (old {2}), update'.format(package, new_version, dist.version) u = logger.ask(txt, bool=('upgrade version', 'keep working version'), dont_ask=self.yes) if u: self.upgrade(package, json, new_version) else: logger.info('{0} has not been upgraded', package) self._clean() logger.success('Updating finished successfully')
def __clean_tempdir(): to_remove = TempDir.not_removed if to_remove: logger.verbose('Cleaning temporary folders', addn=False) for fold in to_remove: if os.path.isdir(fold): logger.verbose('.', addn=False) try: shutil.rmtree(fold) except (OSError, IOError): logger.verbose('\bx', addn=False) sys.stdout.flush() if logger.level <= logger.VERBOSE: logger.newline()