import sys from .util import get_command_output def pip_freeze(): req_lines = [] local_packages = [] try: req_lines = get_command_output([sys.executable, "-m", "pip", "freeze"]).splitlines() # fix "package @ file://" from pip freeze to "package" for i, r in enumerate(req_lines): parts = r.split('@', 1) if parts and len(parts) == 2 and parts[1].strip().lower().startswith('file://'): req_lines[i] = parts[0] local_packages.append((i, parts[0].strip())) # if we found local packages, at least get their versions (using pip list) if local_packages: # noinspection PyBroadException try: list_lines = get_command_output( [sys.executable, "-m", "pip", "list", "--format", "freeze"]).splitlines() for index, name in local_packages: line = [r for r in list_lines if r.strip().startswith(name+'==')] if not line: continue line = line[0] req_lines[index] = line.strip() except Exception: pass except Exception as ex: print('Failed calling "pip freeze": {}'.format(str(ex))) return req_lines