def deactivate(self): try: venv = get_venv() except KeyError: self.warning("no venv to deactivate") return False else: if not venv: return False self.report("venv_deactivate: " + venv) self.publish(C_PRE_DEACTIVATE, venv) if not ope(venv): self.warning('refusing to deactivate (relocated?) venv') return # raise RuntimeError(err) del os.environ['VIRTUAL_ENV'] path = get_path() path = path.split(':') # clean $PATH according to bash.. # TODO: also rehash? vbin = to_vbin(venv) if vbin in path: msg = 'removing old venv bin from PATH: ' + \ summarize_fpath(str(vbin)) self.report(msg) path.remove(vbin) os.environ['PATH'] = ':'.join(path) # clean sys.path according to python.. # stupid, but this seems to work msg = 'clean sys.path' # ,sys.path_changes) self.report(msg) smash_log.info(msg) reset_path = getattr(self, 'reset_path', None) if reset_path is not None: msg = str(set(sys.path) ^ set(reset_path)) msg = 'sys.path difference: {0}'.format(msg) self.report(msg) smash_log.debug(msg) sys.path = reset_path self.reset_path = sys.path else: self.reset_path = sys.path self._clean_user_namespace(venv) self.publish(C_POST_DEACTIVATE, venv) return True