示例#1
0
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 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
示例#3
0
    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))
示例#4
0
    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)
示例#5
0
    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))
示例#6
0
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
示例#7
0
    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)