def install(self, arg, mode='recur', force=False, forceall=False): req = req_from_anything(arg) # resolve the list of eggs that need to be installed self._connect() resolver = Resolve(self.remote, self.verbose) eggs = resolver.install_sequence(req, mode) if eggs is None: raise EnpkgError("No egg found for requirement '%s'." % req) if not forceall: # remove already installed eggs from egg list rm = lambda eggs: [e for e in eggs if self.find(e) is None] if force: eggs = rm(eggs[:-1]) + [eggs[-1]] else: eggs = rm(eggs) # fetch eggs for egg in eggs: self.fetch(egg, force or forceall) if not self.hook: # remove packages with the same name (from first egg collection # only, in reverse install order) for egg in reversed(eggs): try: self.remove(Req(name_egg(egg))) except EnpkgError: pass # install eggs for egg in eggs: extra_info = {} repo = self.remote.where_from(egg) if repo: extra_info['repo_dispname'] = repo.info()['dispname'] self.ec.install(egg, self.local_dir, extra_info) return len(eggs)