def main(): global debug install_path = None if len(sys.argv) < 2 or sys.argv[1] == "-h" or sys.argv[1] == "--help": help() if sys.argv[1] != "install": fatal("Only 'install' command supported") to_install = [] i = 2 while i < len(sys.argv) and sys.argv[i][0] == "-": opt = sys.argv[i] i += 1 if opt == "-h" or opt == "--help": help() elif opt == "-p": install_path = sys.argv[i] i += 1 elif opt == "-r": list_file = sys.argv[i] i += 1 with open(list_file) as f: while True: l = f.readline() if not l: break to_install.append(l.rstrip()) elif opt == "--debug": debug = True else: fatal("Unknown/unsupported option: " + opt) if install_path is None: install_path = os.getenv("MICROPYPATH") or DEFAULT_MICROPYPATH install_path = install_path.split(":", 1)[0] install_path = expandhome(install_path) if install_path[-1] != "/": install_path += "/" print("Installing to: " + install_path) to_install.extend(sys.argv[i:]) if not to_install: help() # sets would be perfect here, but don't depend on them installed = [] try: while to_install: if debug: print("Queue:", to_install) pkg_spec = to_install.pop(0) if pkg_spec in installed: continue meta = install_pkg(pkg_spec, install_path) installed.append(pkg_spec) if debug: print(meta) deps = meta.get("deps", "").rstrip() if deps: deps = deps.decode("utf-8").split("\n") to_install.extend(deps) except NotFoundError: print("Error: cannot find '%s' package (or server error), packages may be partially installed" \ % pkg_spec, file=sys.stderr) if not debug: cleanup()
def expandhome(s): h = os.getenv("HOME") s = s.replace("~/", h + "/") return s