python-script-launcher 0.0.11__py3-none-any.whl → 0.0.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,14 +66,20 @@ def cmd_run(args):
66
66
  LAUNCHER_FILES = ["app.py", "client.py", "tasks.py"]
67
67
  STATIC_DIR = "static"
68
68
  SHIM_PKG = "python_script_launcher"
69
+ # Files placed inside the staged `python_script_launcher/` package so the
70
+ # frozen exe supports both `from python_script_launcher import task` and
71
+ # `from python_script_launcher.tasks import task`.
72
+ SHIM_SUBMODULES = ("tasks.py",)
69
73
  SHIM_INIT = (
70
- '"'*3 + "Compatibility shim generated by launcher build.\n\n"
71
- "Allows user scripts to write ``from python_script_launcher import task``\n"
72
- "even after being packaged into a standalone exe. All names are forwarded\n"
73
- "from the top-level ``tasks`` module that ships alongside the launcher.\n"
74
+ '"'*3 + "Runtime shim generated by launcher build.\n\n"
75
+ "Re-exports the public API from ``python_script_launcher.tasks`` so both\n"
76
+ " from python_script_launcher import task\n"
77
+ " from python_script_launcher.tasks import task\n"
78
+ "work inside a frozen exe. The submodule is copied verbatim from the\n"
79
+ "installed launcher package.\n"
74
80
  + '"'*3 + "\n"
75
- "from tasks import * # noqa: F401,F403\n"
76
- "from tasks import task, run_cli, collect_tasks, TaskSpec, TaskParam # noqa: F401\n"
81
+ "from .tasks import * # noqa: F401,F403\n"
82
+ "from .tasks import task, run_cli, collect_tasks, TaskSpec, TaskParam # noqa: F401\n"
77
83
  )
78
84
 
79
85
 
@@ -89,12 +95,17 @@ def _stage_project(scripts_src: Path) -> Path:
89
95
  static_src = PACKAGE_DIR / STATIC_DIR
90
96
  if static_src.exists():
91
97
  shutil.copytree(static_src, tmp / STATIC_DIR)
92
- # Generate a lightweight `python_script_launcher` package shim so user
93
- # scripts using `from python_script_launcher import task` keep working
94
- # inside the frozen exe. The exe ships `tasks.py` at its root, and the
95
- # shim just re-exports its public names.
98
+ # Stage a real `python_script_launcher/` package next to the top-level
99
+ # runtime files. Copying `tasks.py` in as a submodule (plus a small
100
+ # re-export shim in __init__.py) makes both `from python_script_launcher
101
+ # import task` and `from python_script_launcher.tasks import task` work
102
+ # inside the frozen exe, matching what the wheel install exposes.
96
103
  shim_dir = tmp / SHIM_PKG
97
104
  shim_dir.mkdir(parents=True, exist_ok=True)
105
+ for name in SHIM_SUBMODULES:
106
+ src = PACKAGE_DIR / name
107
+ if src.exists():
108
+ shutil.copy2(src, shim_dir / name)
98
109
  (shim_dir / "__init__.py").write_text(SHIM_INIT, encoding="utf-8", newline="\n")
99
110
  # Copy user scripts into <tmp>/scripts so both scan_scripts and
100
111
  # PyInstaller's --add-data pick them up.
@@ -161,9 +161,17 @@ def build_exe(entry, name, *, project=None, dist=None, static=None,
161
161
  # mirrors publish.py wheel layout and add its parent to `--paths`, so
162
162
  # `from python_script_launcher.tasks import task` resolves the same
163
163
  # way it does when installed from the wheel.
164
- stage_root = _stage_launcher_package(project)
164
+ # If the caller already staged a python_script_launcher/ package into
165
+ # `project` (e.g. via __main__.cmd_build), reuse it verbatim so we do
166
+ # not end up with two competing copies of the same package on --paths.
167
+ if (project / "python_script_launcher" / "__init__.py").exists():
168
+ stage_root = None
169
+ else:
170
+ stage_root = _stage_launcher_package(project)
165
171
  try:
166
- cmd += ["--paths", str(project), "--paths", str(stage_root)]
172
+ cmd += ["--paths", str(project)]
173
+ if stage_root is not None:
174
+ cmd += ["--paths", str(stage_root)]
167
175
  if (project / "tasks.py").exists():
168
176
  cmd += ["--hidden-import", "tasks"]
169
177
  cmd += [
@@ -188,7 +196,8 @@ def build_exe(entry, name, *, project=None, dist=None, static=None,
188
196
  out = f"{dist_dir}/{name}.exe" if onefile else f"{dist_dir}/{name}/{name}.exe"
189
197
  print(f" [OK] {name} -> {out}\n")
190
198
  finally:
191
- shutil.rmtree(stage_root, ignore_errors=True)
199
+ if stage_root is not None:
200
+ shutil.rmtree(stage_root, ignore_errors=True)
192
201
 
193
202
 
194
203
  def main():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-script-launcher
3
- Version: 0.0.11
3
+ Version: 0.0.12
4
4
  Summary: Package Python scripts into standalone exe (Web + desktop client).
5
5
  License-Expression: MIT
6
6
  Keywords: pyinstaller,packaging,exe,launcher,scripts
@@ -1,16 +1,16 @@
1
1
  python_script_launcher/__init__.py,sha256=XeqJdWwu4-26nBlxeu2urarg3chsKMYYAWKgbUQnUyo,1750
2
- python_script_launcher/__main__.py,sha256=PiKbURpPYHkB8ZQ7YCSYPKh_YUi6R2FKJEjBDXdgm_c,6824
2
+ python_script_launcher/__main__.py,sha256=siqi1bFNpbuK2ed-fvJ-E1EcLg9KCurFN8dP3fvP7V8,7349
3
3
  python_script_launcher/app.py,sha256=Qr5GAhqiHaKs3eZUkJvsyMInDIPGcJb0m8pJ-D1zuUY,25211
4
4
  python_script_launcher/client.py,sha256=pULe9xHv4OuXFAdiFAEHp4uxO8x4D_myyNX6ofqElMg,2964
5
- python_script_launcher/make_exe.py,sha256=X-_T4c-htHA46nz465Dog1xfUeHj27wWgiwHjHcqFS0,8399
5
+ python_script_launcher/make_exe.py,sha256=4K8gHnfg7FGgD1WvHaxwp9yk1MhpWGtJOXHYpZgc0Ws,8826
6
6
  python_script_launcher/tasks.py,sha256=0f6P88vlUXscnIxXNL5pEQpmr6x-kavAHvDB9Z1qowE,5755
7
7
  python_script_launcher/scripts/file_status.py,sha256=D22FwHlsNnJkHz7ICyM3L2xK3vhNaMRl-aJEERrEG8s,1063
8
8
  python_script_launcher/scripts/hello.py,sha256=df5gR95rta5J0sDORI0wncCTBS0wGrTX07pEcR9R4_A,517
9
9
  python_script_launcher/scripts/multi.py,sha256=2HApGhrdt8Xs1WZ9HY7yHXAlabqc1KRC6CHqTUhjWy0,590
10
10
  python_script_launcher/scripts/test_modules.py,sha256=AFzAAC2NlYSVcPucNgChguLMEj8m1pmCIB3LIDthOf8,618
11
11
  python_script_launcher/static/index.html,sha256=_HTLklrRge6A09l2kb5ucFI4rrm2KMIEgU9xXbPJzT8,15000
12
- python_script_launcher-0.0.11.dist-info/METADATA,sha256=rTy-hgyoSPVcP8HDc1jNAAQalUHBWHRweU8QkU_OcKo,6378
13
- python_script_launcher-0.0.11.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
14
- python_script_launcher-0.0.11.dist-info/entry_points.txt,sha256=13ENRmw4BsgWGLDCr_y1dKB91ed1j6rEyks6JDFzOns,66
15
- python_script_launcher-0.0.11.dist-info/top_level.txt,sha256=Ap6WryIb1YRnr_QVCmfGjdEVLDNA3dQcTl_-gxX11qk,23
16
- python_script_launcher-0.0.11.dist-info/RECORD,,
12
+ python_script_launcher-0.0.12.dist-info/METADATA,sha256=qBK3LK0GmI_r9v9Qnpxc3_J4KUDMVATVl2KaKjuRHd4,6378
13
+ python_script_launcher-0.0.12.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
14
+ python_script_launcher-0.0.12.dist-info/entry_points.txt,sha256=13ENRmw4BsgWGLDCr_y1dKB91ed1j6rEyks6JDFzOns,66
15
+ python_script_launcher-0.0.12.dist-info/top_level.txt,sha256=Ap6WryIb1YRnr_QVCmfGjdEVLDNA3dQcTl_-gxX11qk,23
16
+ python_script_launcher-0.0.12.dist-info/RECORD,,