Source code for pymyinstall.cli.pymy_update

#!python
"""
script which updates all modules,
works on Linux and Windows if the module is
included the list of modules handled by this module


:githublink:`%|py|7`
"""
from __future__ import print_function
import sys
import os
import argparse


[docs]def get_parser(): """ defines the way to parse the script ``pymy_update`` :githublink:`%|py|16` """ typstr = str # unicode# parser = argparse.ArgumentParser( description='update modules, consider wheels when the module includes C++ files') parser.add_argument( '-s', '--skip', default="ete,dataspyre,pycuda,cubehelix", type=typstr, help='list of modules to skip (not to be updated) separated by a comma') parser.add_argument( '-f', '--folder', type=typstr, default="build/update_modules", help='folder where modules will be downloaded') parser.add_argument( '--set', default="-", type=typstr, help='set of module to install, see documentation of function get_name_set to get a comprehensive list, ' + 'this option is ignored if a module is specified on the command line') parser.add_argument( '--source', default="", type=typstr, help='overwrite the source of the wheels') parser.add_argument( '--schedule', action='store_true', help='do not update the modules, returned the list scheduled to be updated') parser.add_argument( 'module', nargs="*", default="all", help='update only the list of modules included in this list or all modules if not specified or equal to all') return parser
[docs]def do_main(temp_folder="build/update_modules", skip_module="ete dataspyre pycuda cubehelix".split(), list_module=None, schedule_only=False, source=None): """ calls function :func:`update_all <pymyinstall.packaged.automate_install.update_all>` but is meant to be added to scripts folder :param temp_folder: folder where modules will be downloaded :param skip_module: skip the module on this list :param list_module: list of modules to update or None for all :param schedule_only: if True, the function returns the list of modules scheduled to be installed :param source: overwrite the source of the wheels :githublink:`%|py|66` """ try: from pymyinstall import is_travis_or_appveyor except ImportError: def is_travis_or_appveyor(): if "travis" in sys.executable: return "travis" if os.environ.get("USERNAME", os.environ.get("USER", None)) == "appveyor": return "appveyor" return None if is_travis_or_appveyor() and source is None: source = "2" if not os.path.exists(temp_folder): os.makedirs(temp_folder) try: from pymyinstall.packaged import update_all except ImportError: pfolder = os.path.normpath(os.path.join( os.path.abspath(os.path.dirname(__file__)), "..", "..")) sys.path.append(pfolder) if "pymyinstall" in sys.modules: del sys.modules["pymyinstall"] if "pymyinstall.packaged" in sys.modules: del sys.modules["pymyinstall.packaged"] from pymyinstall.packaged import update_all res = update_all(temp_folder=temp_folder, verbose=True, skip_module=skip_module, list_module=list_module, schedule_only=schedule_only, source=source) if schedule_only: print("SCHEDULED") for r in res: print(r)
[docs]def main(): """ calls function :func:`update_all <pymyinstall.packaged.automate_install.update_all>` but is meant to be added to scripts folder, parse command line arguments :githublink:`%|py|105` """ parser = get_parser() try: res = parser.parse_args() except SystemExit: print(parser.format_usage()) res = None if res is not None: skip_module = None if res.skip in [ "", "-", None, []] else res.skip.split(",") list_module = None if res.module in [ "all", "", "-", None, []] else res.module if list_module is None and res.set is not None and len(res.set) > 0 and res.set != "-": list_module = res.set do_main(temp_folder=res.folder, skip_module=skip_module, list_module=list_module, schedule_only=res.schedule, source=res.source if res.source else None)
if __name__ == "__main__": main()