def build(args, scripts, data_files, options): old_argv = sys.argv sys.argv = [sys.argv[0], 'py2app'] + args old_path = sys.path path_insert = set() for script in scripts: path_insert.add(os.path.dirname(script)) sys.path = list(path_insert) + old_path old_dir = os.getcwd() tempdir = tempfile.mkdtemp() os.chdir(tempdir) try: d = setup( app=scripts, data_files=data_files, options={'py2app': options}, ) for target in d.app: copy_tree( target.appdir, os.path.join( os.path.dirname(target.script), os.path.basename(target.appdir), ), preserve_symlinks=True, ) finally: os.chdir(old_dir) shutil.rmtree(tempdir, ignore_errors=True) sys.argv = old_argv sys.path = old_path
def copy_package_data(self, package, target_dir): """ Copy any package data in a python package into the target_dir. This is a bit of a hack, it would be better to identify python eggs and copy those in whole. """ exts = [i[0] for i in imp.get_suffixes()] exts.append('.py') exts.append('.pyc') exts.append('.pyo') def datafilter(item): for e in exts: if item.endswith(e): return False return True target_dir = os.path.join(target_dir, *(package.identifier.split('.'))) for dname in package.packagepath: filenames = filter(datafilter, os_listdir(dname)) for fname in filenames: if fname in ('.svn', 'CVS'): # Scrub revision manager junk continue pth = os.path.join(dname, fname) # Check if we have found a package, exclude those if os_path_isdir(pth): for p in os_listdir(pth): if p.startswith('__init__.') and p[8:] in exts: break else: copy_tree(pth, os.path.join(target_dir, fname)) continue else: copy_file(pth, os.path.join(target_dir, fname))
def copy_tree(self, infile, outfile, preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1, condition=None): """Copy an entire directory tree respecting verbose, dry-run, and force flags. This version doesn't bork on existing symlinks """ return copy_tree( infile, outfile, preserve_mode,preserve_times,preserve_symlinks, not self.force, dry_run=self.dry_run, condition=condition)
def copy_package_data(self, package, target_dir): """ Copy any package data in a python package into the target_dir. This is a bit of a hack, it would be better to identify python eggs and copy those in whole. """ exts = [ i[0] for i in imp.get_suffixes() ] exts.append('.py') exts.append('.pyc') exts.append('.pyo') def datafilter(item): for e in exts: if item.endswith(e): return False return True target_dir = os.path.join(target_dir, *(package.identifier.split('.'))) for dname in package.packagepath: filenames = filter(datafilter, os_listdir(dname)) for fname in filenames: if fname in ('.svn', 'CVS'): # Scrub revision manager junk continue pth = os.path.join(dname, fname) # Check if we have found a package, exclude those if os_path_isdir(pth): for p in os_listdir(pth): if p.startswith('__init__.') and p[8:] in exts: break else: copy_tree(pth, os.path.join(target_dir, fname)) continue else: copy_file(pth, os.path.join(target_dir, fname))
def build( args: typing.List[str], scripts: typing.List[str], data_files: typing.List[str], options: typing.Dict[str, typing.Any], ) -> None: old_argv = sys.argv sys.argv = [sys.argv[0], "py2app"] + args old_path = sys.path path_insert = set() for script in scripts: path_insert.add(os.path.dirname(script)) sys.path = list(path_insert) + old_path old_dir = os.getcwd() tempdir = tempfile.mkdtemp() os.chdir(tempdir) try: d = setup( # type: ignore app=scripts, data_files=data_files, # type: ignore options={"py2app": options}, ) for target in d.app: copy_tree( target.appdir, os.path.join( os.path.dirname(target.script), os.path.basename(target.appdir), ), preserve_symlinks=True, ) finally: os.chdir(old_dir) shutil.rmtree(tempdir, ignore_errors=True) sys.argv = old_argv sys.path = old_path
def copy_tree(self, infile, outfile, preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1, condition=None): """Copy an entire directory tree respecting verbose, dry-run, and force flags. This version doesn't bork on existing symlinks """ return copy_tree(infile, outfile, preserve_mode, preserve_times, preserve_symlinks, not self.force, dry_run=self.dry_run, condition=condition)