def app_is_installed(fn): """ Return the list of prefix directories in which `fn` in installed into, which might be an empty list. """ prefixes = [config.root_dir] for fn2 in os.listdir(config.envs_dir): prefix = join(config.envs_dir, fn2) if isdir(prefix): prefixes.append(prefix) dist = fn[:-8] return [prefix for prefix in prefixes if install.is_linked(prefix, dist)]
def ensure_linked_actions(dists, prefix): actions = defaultdict(list) actions[PREFIX] = prefix for dist in dists: if install.is_linked(prefix, dist): continue actions[LINK].append(dist) if install.is_extracted(config.pkgs_dir, dist): continue actions[EXTRACT].append(dist) if install.is_fetched(config.pkgs_dir, dist): continue actions[FETCH].append(dist) return actions
def launch(fn, prefix=config.root_dir, additional_args=None): info = install.is_linked(prefix, fn[:-8]) if info is None: return None # prepend the bin directory to the path fmt = r'%s\Scripts;%s' if sys.platform == 'win32' else '%s/bin:%s' env = {'PATH': fmt % (abspath(prefix), os.getenv('PATH'))} # copy existing environment variables, but not anything with PATH in it for k, v in os.environ.iteritems(): if 'PATH' not in k: env[k] = v # allow updating environment variables from metadata if 'app_env' in info: env.update(info['app_env']) # call the entry command args = info['app_entry'].split() cwd = abspath(expanduser('~')) if additional_args: args.extend(additional_args) return subprocess.Popen(args, cwd=cwd , env=env)
def install_local_packages(prefix, paths, verbose=False): # copy packages to pkgs dir dists = [] for src_path in paths: assert src_path.endswith('.tar.bz2') fn = basename(src_path) dists.append(fn[:-8]) dst_path = join(config.pkgs_dir, fn) if abspath(src_path) == abspath(dst_path): continue shutil.copyfile(src_path, dst_path) actions = defaultdict(list) actions['PREFIX'] = prefix actions['op_order'] = RM_EXTRACTED, EXTRACT, UNLINK, LINK for dist in dists: actions[RM_EXTRACTED].append(dist) actions[EXTRACT].append(dist) if install.is_linked(prefix, dist): actions[UNLINK].append(dist) actions[LINK].append(dist) execute_actions(actions, verbose=verbose)