def _obfuscate(args): '''Obfuscate scripts without project''' path = args.src logging.info('Obfuscate scripts in path "%s" ...', path) capsule = os.path.join(path, capsule_filename) if not os.path.exists(capsule): logging.info('Generate capsule %s', capsule) make_capsule(capsule) output = args.output files = Project.build_globfiles(args.patterns, path) filepairs = [(os.path.join(path, x), os.path.join(output, x)) for x in files] mode = Project.map_obfuscate_mode(default_obf_module_mode, default_obf_code_mode) logging.info('Obfuscate scripts with mode %s', mode) logging.info('Save obfuscated scripts to "%s"', output) for a, b in filepairs: logging.info('\t%s -> %s', a, b) obfuscate_scripts(filepairs, mode, capsule, output) logging.info('Make runtime files') make_runtime(capsule, output) for entry in args.entry.split(','): filename = os.path.join(output, entry.strip()) if not os.path.exists(filename): shutil.copy(os.path.join(path, entry.strip()), filename) logging.info('Update entry script %s', filename) make_entry(filename) logging.info('Obfuscate %d scripts OK.', len(files))
def _obfuscate(args): '''Obfuscate scripts without project''' if args.src is None and args.entry is None and not args.scripts: raise RuntimeError('No entry script') entry = args.entry or args.scripts[0] path = os.path.abspath( os.path.dirname(entry) if args.src is None else args.src) logging.info('Obfuscate scripts in path "%s" ...', path) capsule = args.capsule if args.capsule else DEFAULT_CAPSULE if os.path.exists(capsule) and check_capsule(capsule): logging.info('Use cached capsule %s', capsule) else: logging.info('Generate capsule %s', capsule) make_capsule(capsule) output = args.output if args.recursive: pats = ['global-include *.py', 'prune build', 'prune dist'] if hasattr('', 'decode'): pats = [p.decode() for p in pats] files = Project.build_manifest(pats, path) else: files = Project.build_globfiles(['*.py'], path) filepairs = [(os.path.join(path, x), os.path.join(output, x)) for x in files] if args.restrict: logging.info('Restrict mode is eanbled') mode = Project.map_obfuscate_mode(default_obf_module_mode, default_obf_code_mode) else: logging.info('Restrict mode is disabled') mode = Project.map_obfuscate_mode(default_obf_module_mode, 'wrap') logging.info('Obfuscate scripts with mode %s', mode) logging.info('Save obfuscated scripts to "%s"', output) for a, b in filepairs: logging.info('\t%s -> %s', a, b) obfuscate_scripts(filepairs, mode, capsule, output) logging.info('Make runtime files') make_runtime(capsule, output) if not args.restrict: licode = '*FLAGS:%c*CODE:Pyarmor-Project' % chr(1) licfile = os.path.join(output, license_filename) logging.info('Generate no restrict mode license file: %s', licfile) make_project_license(capsule, licode, licfile) make_entry(os.path.basename(entry), path, output) for script in args.scripts[1:]: make_entry(os.path.basename(script), path, output) logging.info('Obfuscate %d scripts OK.', len(files))
def _build(args): '''Build project, obfuscate all files in the project''' project = Project() project.open(args.project) logging.info('Build project %s ...', args.project) capsule = build_path(project.capsule, args.project) if not args.only_runtime: output = project.output mode = project.get_obfuscate_mode() files = project.get_build_files(args.force) src = project.src filepairs = [(os.path.join(src, x), os.path.join(output, x)) for x in files] logging.info('%s increment build', 'Disable' if args.force else 'Enable') logging.info('Search scripts from %s', src) logging.info('Obfuscate %d scripts with mode %s', len(files), mode) for x in files: logging.info('\t%s', x) logging.info('Save obfuscated scripts to %s', output) obfuscate_scripts(filepairs, mode, capsule, output) # for x in targets: # output = os.path.join(project.output, x) # pairs = [(os.path.join(src, x), os.path.join(output, x)) # for x in files] # for src, dst in pairs: # try: # shutil.copy2(src, dst) # except Exception: # os.makedirs(os.path.dirname(dst)) # shutil.copy2(src, dst) project['build_time'] = time.time() project.save(args.project) if not args.no_runtime: logging.info('Make runtime files') make_runtime(capsule, output) if project.entry: for x in project.entry.split(','): filename = os.path.join(output, x.strip()) logging.info('Update entry script %s', filename) make_entry(filename, project.runtime_path) else: logging.info('\tIn order to import obfuscated scripts, insert ') logging.info('\t2 lines in entry script:') logging.info('\t\tfrom pytransfrom import pyarmor_runtime') logging.info('\t\tpyarmor_runtime()') logging.info('Build project OK.')
def _obfuscate(args): '''Obfuscate scripts without project''' path = args.src logging.info('Obfuscate scripts in path "%s" ...', path) capsule = args.capsule if args.capsule else capsule_filename if os.path.exists(capsule): logging.info('Use cached capsule %s', capsule) else: logging.info('Generate capsule %s', capsule) make_capsule(capsule) output = args.output if args.recursive: pat = 'global-include *.py'.decode() if hasattr('', 'decode') \ else 'global-include *.py' files = Project.build_manifest([pat], path) else: files = Project.build_globfiles(args.patterns, path) filepairs = [(os.path.join(path, x), os.path.join(output, x)) for x in files] if args.no_restrict: logging.info('Restrict mode is disabled') mode = Project.map_obfuscate_mode(default_obf_module_mode, 'wrap') else: mode = Project.map_obfuscate_mode(default_obf_module_mode, default_obf_code_mode) logging.info('Obfuscate scripts with mode %s', mode) logging.info('Save obfuscated scripts to "%s"', output) for a, b in filepairs: logging.info('\t%s -> %s', a, b) obfuscate_scripts(filepairs, mode, capsule, output) logging.info('Make runtime files') make_runtime(capsule, output) if args.no_restrict: licode = '*FLAGS:%c*CODE:Pyarmor-Project' % chr(1) licfile = os.path.join(output, license_filename) logging.info('Generate no restrict mode license file: %s', licfile) make_project_license(capsule, licode, licfile) if args.entry: make_entry(args.entry, path, output) logging.info('Obfuscate %d scripts OK.', len(files))
def _build(args): '''Build project, obfuscate all scripts in the project.''' project = Project() project.open(args.project) logging.info('Build project %s ...', args.project) capsule = build_path(project.capsule, args.project) logging.info('Use capsule: %s', capsule) output = build_path(project.output, args.project) \ if args.output is None else args.output logging.info('Output path is: %s', output) if not args.only_runtime: mode = project.get_obfuscate_mode() files = project.get_build_files(args.force) src = project.src soutput = os.path.join(output, os.path.basename(src)) \ if project.get('is_package') else output filepairs = [(os.path.join(src, x), os.path.join(soutput, x)) for x in files] logging.info('%s increment build', 'Disable' if args.force else 'Enable') logging.info('Search scripts from %s', src) logging.info('Obfuscate %d scripts with mode %s', len(files), mode) for x in files: logging.info('\t%s', x) logging.info('Save obfuscated scripts to %s', soutput) obfuscate_scripts(filepairs, mode, capsule, soutput) # for x in targets: # output = os.path.join(project.output, x) # pairs = [(os.path.join(src, x), os.path.join(output, x)) # for x in files] # for src, dst in pairs: # try: # shutil.copy2(src, dst) # except Exception: # os.makedirs(os.path.dirname(dst)) # shutil.copy2(src, dst) project['build_time'] = time.time() project.save(args.project) if project.entry: make_entry(project.entry, project.src, output, rpath=project.runtime_path, ispackage=project.get('is_package')) if not args.no_runtime: routput = os.path.join(output, os.path.basename(project.src)) \ if project.get('is_package') else output if not os.path.exists(routput): logging.info('Make path: %s', routput) os.mkdir(routput) logging.info('Make runtime files to %s', routput) make_runtime(capsule, routput) if project.get('disable_restrict_mode'): licode = '*FLAGS:%c*CODE:Pyarmor-Project' % chr(1) licfile = os.path.join(routput, license_filename) logging.info('Generate no restrict mode license file: %s', licfile) make_project_license(capsule, licode, licfile) else: logging.info('\tIn order to import obfuscated scripts, insert ') logging.info('\t2 lines in entry script:') logging.info('\t\tfrom pytransfrom import pyarmor_runtime') logging.info('\t\tpyarmor_runtime()') logging.info('Build project OK.')