Example #1
0
 def run(self, creator, symlinks):
     bin_dir = self.dest(creator, self.src).parent
     method = symlink if self.must_copy is False and symlinks else copy
     dest = bin_dir / self.base
     method(self.src, dest)
     make_exe(dest)
     for extra in self.aliases:
         link_file = bin_dir / extra
         if link_file.exists():
             link_file.unlink()
         alias_via(dest, link_file)
         make_exe(link_file)
Example #2
0
 def run(self, creator, symlinks):
     bin_dir = self.dest(creator, self.src).parent
     dest = bin_dir / self.base
     method = self.method(symlinks)
     method(self.src, dest)
     make_exe(dest)
     for extra in self.aliases:
         link_file = bin_dir / extra
         if link_file.exists():
             link_file.unlink()
         if symlinks:
             link_file.symlink_to(self.base)
         else:
             copy(self.src, link_file)
         make_exe(link_file)
    def _create_console_entry_point(self, name, value, to_folder):
        result = []
        if IS_WIN:
            # windows doesn't support simple script files, so fallback to more complicated exe generator
            from distlib.scripts import ScriptMaker

            maker = ScriptMaker(None, str(to_folder))
            maker.clobber = True  # overwrite
            maker.variants = {"", "X", "X.Y"}  # create all variants
            maker.set_mode = True  # ensure they are executable
            maker.executable = str(self._creator.exe)
            specification = "{} = {}".format(name, value)
            new_files = maker.make(specification)
            result.extend(Path(i) for i in new_files)
        else:
            module, func = value.split(":")
            content = (
                dedent(
                    """
            #!{0}
            # -*- coding: utf-8 -*-
            import re
            import sys

            from {1} import {2}

            if __name__ == "__main__":
                sys.argv[0] = re.sub(r"(-script.pyw?|.exe)?$", "", sys.argv[0])
                sys.exit({2}())
            """
                )
                .lstrip()
                .format(self._creator.exe, module, func)
            )

            version = self._creator.interpreter.version_info
            for new_name in (
                name,
                "{}{}".format(name, version.major),
                "{}-{}.{}".format(name, version.major, version.minor),
            ):
                exe = to_folder / new_name
                exe.write_text(content, encoding="utf-8")
                make_exe(exe)
                result.append(exe)
        return result