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)
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