From 020b8497c09195413b6c8a3140a35bffaec06566 Mon Sep 17 00:00:00 2001 From: Tobias Gruetzmacher Date: Thu, 1 Oct 2020 16:03:20 +0200 Subject: [PATCH] Generate start script for PyInstaller from entry point --- scripts/dosage.spec | 49 ++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/scripts/dosage.spec b/scripts/dosage.spec index bb3310eeb..eb9883c25 100644 --- a/scripts/dosage.spec +++ b/scripts/dosage.spec @@ -1,25 +1,40 @@ -# -*- mode: python ; coding: utf-8 -*- +# SPDX-License-Identifier: MIT +# Copyright (C) 2017-2020 Tobias Gruetzmacher -block_cipher = None +# Idea from +# https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Setuptools-Entry-Point, +# but with importlib +def Entrypoint(group, name, **kwargs): + import re + try: + from importlib.metadata import entry_points + except ImportError: + from importlib_metadata import entry_points + + # get the entry point + eps = entry_points()[group] + ep = next(ep for ep in eps if ep.name == name) + module, attr = re.split(r'\s*:\s*', ep.value, 1) + + # script name must not be a valid module name to avoid name clashes on import + script_path = os.path.join(workpath, name + '-script.py') + print("creating script for entry point", group, name) + with open(script_path, 'w') as fh: + print("import sys", file=fh) + print("import", module, file=fh) + print("sys.exit(%s.%s())" % (module, attr), file=fh) + + return Analysis( + [script_path] + kwargs.get('scripts', []), + **kwargs + ) -a = Analysis(['../dosage'], - pathex=['.'], - binaries=[], - datas=[], - hiddenimports=[], - hookspath=['.'], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) +a = Entrypoint('console_scripts', 'dosage') a.binaries = [x for x in a.binaries if not x[1].lower().startswith(r'c:\windows')] -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) +pyz = PYZ(a.pure, a.zipped_data) exe = EXE(pyz, a.scripts, a.binaries, @@ -31,3 +46,5 @@ exe = EXE(pyz, upx=False, runtime_tmpdir=None, console=True) + +# vim: set ft=python: