Auto-discover scripts from pyproject.toml and generate platform-specific launcher scripts that use uv run internally.
Install globally as a UV tool:
uv tool install uv-launcherOr install from source:
uv sync --all-extrasList all scripts found in pyproject.toml:
uv-launcher listList scripts from a specific project directory:
uv-launcher list --path /path/to/projectGenerate platform-specific launcher scripts in a scripts/ directory:
uv-launcher generateGenerate launchers for a specific project:
uv-launcher generate --path /path/to/project-
Discovery: The tool reads
[project.scripts]frompyproject.tomlin the current directory (or specified path). -
Platform Detection: Automatically detects your platform:
- Unix/macOS: Generates
.shshell scripts - Windows: Generates both
.batbatch files and.ps1PowerShell scripts
- Unix/macOS: Generates
-
Launcher Generation: Creates launcher scripts in a
scripts/directory that:- Change to the project root directory
- Execute the script using
uv run <entry_point> - Pass through command-line arguments
Given a pyproject.toml with:
[project.scripts]
my-script = "mymodule:main"
another-script = "scripts.run:main"Running uv-launcher generate will create:
On Unix/macOS:
scripts/my-script.shscripts/another-script.sh
On Windows:
scripts/my-script.batandscripts/my-script.ps1scripts/another-script.batandscripts/another-script.ps1
You can then run your scripts directly:
# Unix/macOS
./scripts/my-script.sh
# Windows
scripts\my-script.bat
# or
powershell scripts\my-script.ps1- ✅ Auto-discovers scripts from
[project.scripts]inpyproject.toml - ✅ Supports nested script paths (e.g.,
scripts.run:main) - ✅ Cross-platform launcher generation (.sh, .bat, .ps1)
- ✅ Uses
uv runinternally for consistent execution - ✅ Automatically makes Unix scripts executable
- ✅ Overwrites existing scripts (no prompts)
- Python >= 3.9.13
- UV (https://docs.astral.sh/uv)
tomli(automatically installed for Python < 3.11)
uv-launcher generate --path "C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\stream_viewer"
"C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\continuous_video_recorder"
"C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\emotiv-lsl"
"C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\lab-recorder-python"
"C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\PhoLogToLabStreamingLayer"
uv-launcher generate --path "C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\python_xdf_streamer"
uv-launcher generate --path "C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\emotiv-lsl"
uv-launcher generate --path "C:\Users\pho\repos\EmotivEpoc\ACTIVE_DEV\emotiv-lsl"