| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A fast CLI to discover, alias, and run Python virtual environments — with an interactive TUI.
Windows and macOS supported. Linux support planned.
Pick whichever you prefer:
Windows:
irm https://raw.githubusercontent.com/Higangssh/pvm/main/install.ps1 | iexmacOS:
curl -fsSL https://raw.githubusercontent.com/Higangssh/pvm/main/install.sh | shDownloads the latest binary and adds it to your user PATH. Restart your terminal, or source your shell rc, then run pvm --help.
./pvm --helpgit clone https://github.com/Higangssh/pvm.git
cd pvm
go build -o pvm.exe .macOS:
git clone https://github.com/Higangssh/pvm.git
cd pvm
go build -o pvm .# 1. Discover every venv under a workspace
pvm scan C:\projects
# 2. See what got registered
pvm list
# 3. Run something
pvm shell my-app # open an activated shell
pvm exec my-app -- pip list # run any command in the venv
pvm run my-app script.py # run python with argspvm does not auto-scan on list.
That means your first run is usually:
pvm scan C:\projects
pvm listWhen you run scan, pvm creates aliases for you automatically.
If the alias already exists, pvm adds a number like 2, 3, etc.
Both commands now show exactly what they are about to change and ask for confirmation.
pvm add C:\work\my-api\.venv
# Add my-api (C:\work\my-api\.venv)? [y/N]
pvm remove my-api
# Remove my-api (C:\work\my-api\.venv)? [y/N]Use -y or --yes to skip confirmation.
| Command | Description |
|---|---|
| pvm list | Show all registered venvs (alias, Python version, path, saved commands) |
| pvm scan <path> | Recursively find venvs in a directory and register them (-d for max depth, default 4) |
| pvm add <path> [-a alias] [-y] | Register a venv manually (with confirmation by default) |
| pvm remove <alias> [-y] | Unregister a venv by alias (with confirmation by default) |
| pvm alias <old> <new> | Rename an alias |
| Command | Description |
|---|---|
| pvm run <alias> <py-args...> | Run the venv's python.exe with the given args |
| pvm exec <alias> -- <cmd...> | Run any command with venv PATH and VIRTUAL_ENV injected |
| pvm shell <alias> | Open a new cmd window with the venv activated |
| Command | Description |
|---|---|
| pvm save <alias> <name> <cmd...> | Save a custom command for a venv |
| pvm do <alias> <name> | Run a saved command |
Run pvm ui for a full-screen browser (shown in the demo above).
Keybindings: enter/s = shell · r = run · x = exec · d = remove · / = filter · q = quit
# Register all venvs under a workspace folder
pvm scan C:\projects
# + my-api C:\projects\my-api\venv
# + my-app C:\projects\my-app\.venv
# Added 2 venv(s).
# See aliases before removing anything
pvm list
# Add one env manually
pvm add C:\projects\tools\backend-runtime
# Remove one env safely
pvm remove my-api
# Skip confirmation when you want automation
pvm add C:\projects\tools\backend-runtime -y
pvm remove my-api -y
# Quick Python check
pvm run my-api --version
# Python 3.12.0
# Install a package inside the venv
pvm exec my-api -- pip install requests
# Bookmark a common command
pvm save my-api serve python manage.py runserver 0.0.0.0:8000
pvm save my-api test pytest -v
# Use the bookmark
pvm do my-api serve
pvm do my-api test
# Interactive mode
pvm uiStored at the standard user config directory:
It's plain JSON, feel free to edit by hand or back it up.
{
"venvs": [
{
"alias": "my-api",
"path": "C:\\projects\\my-api\\venv",
"commands": {
"serve": "python manage.py runserver 0.0.0.0:8000",
"test": "pytest -v"
}
}
]
}Windows:
irm https://raw.githubusercontent.com/Higangssh/pvm/main/uninstall.ps1 | iexmacOS:
curl -fsSL https://raw.githubusercontent.com/Higangssh/pvm/main/uninstall.sh | shRemoves the installed binary and optionally deletes the config file.
# 1. Remove the binary folder
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\pvm"
# 2. (Optional) Remove your saved venv list
Remove-Item -Recurse -Force "$env:APPDATA\pvm"
# 3. Remove from PATH
# Win + R -> sysdm.cpl -> Advanced -> Environment Variables
# Edit user `Path` -> remove the `...\AppData\Local\pvm` entryNo services, registry entries, or background processes are ever created — pvm is just an executable file.
MIT
| Back | FazBrowse Home | New Git URL |