A pip UI tool
Project description
pip-ui-tkinter
A Tkinter desktop GUI that puts a friendly face on Python's most-used packaging tools. Instead of remembering flags across pip, pipx, build, twine, virtualenv, pip-audit, hatch, flit, pypi-server, and devpi, you click through them in a single window — with discoverable forms, live output, and guardrails on the destructive bits.
Why pip-ui-tkinter
- One window, ten tools. Switch between
pip,pipx,build,twine,virtualenv,pip-audit,hatch,flit,pypi-server, anddevpifrom a single tool switcher. No need to context-switch between docs, terminals, and tutorials. - Discoverable commands. Every subcommand and flag is laid out as a tree with a generated form. You see what's available without
--help-ing your way through ten layers of subcommands. - Real CLI underneath. The UI doesn't reimplement anything — it constructs the exact CLI invocation and runs it. The full argv is shown before and after every run, so you can copy/paste it into a script or learn what the UI just did.
- Safety rails. Commands are classified as read-only, environment-modifying, destructive, or risky-config. A
--safe-modeflag prompts for confirmation before anything that would uninstall, purge, or rewrite configuration. Global installs are flagged. Secrets in flags are redacted in history and output. - Pure Python, pure stdlib UI. Tkinter ships with Python — no Electron, no browser, no npm. The app launches fast and runs anywhere Python and Tk do.
Features
Multi-tool support
Each tool is a plugin with its own command catalog, run mode, and (where relevant) custom panel:
| Tool | What it does in pip-ui |
|---|---|
pip |
Install, uninstall, list, freeze, show, check, inspect, configure, cache, debug |
pipx |
Install and manage CLI apps in isolated envs; pick the Python they use |
build |
Build sdists and wheels for the current project |
virtualenv |
Create virtual environments with a guided form |
twine |
Upload, check, and register distributions |
pip-audit |
Scan an env or requirements file; results render in a dedicated panel |
hatch |
Project and environment commands with an environment panel |
flit |
Build and publish flit-managed projects |
pypi-server |
Run a local PyPI-compatible index for testing |
devpi |
Drive a devpi server and client from a dedicated panel |
Interpreter & environment awareness
- Auto-discovers the system Python, the active
VIRTUAL_ENV, project.venv, andpython/pyonPATH. - Switch interpreters per-run from the dropdown; the UI invokes commands via
python -m <tool>against the selected interpreter so you can target any env. - Working-directory picker — point any command at a specific project.
--diagnosticsmode prints a Markdown report on the selected interpreter without launching the GUI.
Forms generated from command specs
- Every command knows its required and optional arguments, types, choices, and help text. The form is rendered from that spec, so you get the right widget (checkbox, picker, multi-value, text) for the right flag.
- Per-command global options dialog (proxy, index URL, trusted hosts, etc.) so you don't repeat yourself.
- Requirements-file picker, index selector, and certificate tester live alongside the form.
Live output and history
- Stdout/stderr stream into an output panel as the command runs — no waiting for completion to see what happened.
- Per-command output cache: re-selecting a command restores its last output instead of a blank panel.
- Command history records every run (argv, exit code, duration). Disable with
--no-historyif you prefer not to write it to disk. - Common pip errors are intercepted and translated to a plain-language explanation.
Safety and secrets
--safe-modeputs a confirmation dialog in front of any destructive or config-mutating command.- Auto-detection of global installs warns before they're committed.
- Tool plugins declare which flags carry secrets (tokens, passwords); those values are redacted in the output panel and history file.
Self-update check
- The app checks for newer versions of
pip-ui-tkinterin the background and surfaces an upgrade hint when one's available. Manual checks available from the menu.
Quick start
pipx install pip-ui-tkinter
pip-ui
Useful flags:
pip-ui --interpreter /path/to/python # start with a specific interpreter selected
pip-ui --working-directory ./myproj # start in a specific project dir
pip-ui --safe-mode # confirm before destructive commands
pip-ui --no-history # do not record history to disk
pip-ui --diagnostics # print env diagnostics and exit
To get the optional tools that aren't pip itself, install the matching extra (build, virtualenv, twine, pip-audit, hatch, flit, pipx, pypiserver, devpi) or all-tools for everything.
Requirements
- Python 3.10+
- Tkinter (bundled with python.org installers; on Linux install your distro's
python3-tkpackage)
Links
- Source: https://github.com/matthewdeanmartin/pip_ui
- Issues: https://github.com/matthewdeanmartin/pip_ui/issues
- Changelog: CHANGELOG.md
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pip_ui_tkinter-0.2.0.tar.gz.
File metadata
- Download URL: pip_ui_tkinter-0.2.0.tar.gz
- Upload date:
- Size: 110.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
798097331c7771b7093b2ec7e17b4187790ffda6a950aab0fcfd8430e579ff24
|
|
| MD5 |
67d75ea0f3c35c63c34267fadc694a99
|
|
| BLAKE2b-256 |
bd84984d4362fa53565099b02e0b51194dd2d4493c2a267c83b09c5542e19dea
|
Provenance
The following attestation bundles were made for pip_ui_tkinter-0.2.0.tar.gz:
Publisher:
publish_to_pypi.yml on matthewdeanmartin/pip_ui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pip_ui_tkinter-0.2.0.tar.gz -
Subject digest:
798097331c7771b7093b2ec7e17b4187790ffda6a950aab0fcfd8430e579ff24 - Sigstore transparency entry: 1624002440
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/pip_ui@619bd1dfdbfbfbd1cd19cadd09ae6fe2dc6e4592 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/matthewdeanmartin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_to_pypi.yml@619bd1dfdbfbfbd1cd19cadd09ae6fe2dc6e4592 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pip_ui_tkinter-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pip_ui_tkinter-0.2.0-py3-none-any.whl
- Upload date:
- Size: 107.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ff9fdac6ff3b94f333eb7a1f8390a7ee5863e92cb5da53841563f93513c1197
|
|
| MD5 |
559ae22036f8e42c34afb6182e9b5ef9
|
|
| BLAKE2b-256 |
b0dcc7466cd81e2b517771e4d7af3e7a4862ff73b8c1a92c9027a74a80f0b639
|
Provenance
The following attestation bundles were made for pip_ui_tkinter-0.2.0-py3-none-any.whl:
Publisher:
publish_to_pypi.yml on matthewdeanmartin/pip_ui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pip_ui_tkinter-0.2.0-py3-none-any.whl -
Subject digest:
6ff9fdac6ff3b94f333eb7a1f8390a7ee5863e92cb5da53841563f93513c1197 - Sigstore transparency entry: 1624002478
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/pip_ui@619bd1dfdbfbfbd1cd19cadd09ae6fe2dc6e4592 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/matthewdeanmartin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_to_pypi.yml@619bd1dfdbfbfbd1cd19cadd09ae6fe2dc6e4592 -
Trigger Event:
workflow_dispatch
-
Statement type: