On-disk metadata¶
pipx has no user configuration file. You configure it only through environment variables. The only per-installation state pipx keeps is a metadata file inside each managed virtual environment.
Every environment under $PIPX_HOME/venvs/<environment>/ holds a pipx_metadata.json file. pipx writes it after
each operation and reads it to drive list, upgrade, reinstall, uninstall, and the rest. Treat it as
pipx-owned; pipx rewrites it atomically and may change its shape between versions. pipx puts the file back after each
installer run, including pipx runpip, so a wheel’s data file of the same name cannot replace it.
pipx masks passwords and tokens in URLs it prints or logs, but keeps package_or_url and pip_args here as given,
since reinstall and upgrade need them. Those credentials stay in plain text in this file and in the pipx list
--json snapshot, so prefer a keyring or a .netrc file over credentials embedded in a URL. pipx writes the file
readable by its owner only, whatever the umask; for a --global environment that owner is root.
The current schema version is 0.12 (pipx_metadata_version). pipx migrates older files forward on read.
Top-level fields¶
Field |
Meaning |
|---|---|
|
Schema version string, currently |
|
The environment (venv) name, or |
|
Package record for the installed application (see below). |
|
Map of injected package name to its package record. |
|
Python version the environment was created with, or |
|
Path to the interpreter used to create the environment, or |
|
Extra arguments passed when the venv was created. pipx records only |
|
Backend that manages the environment, |
|
Whether pipx currently exposes the environment’s apps and man pages on |
Package records¶
main_package and each entry in injected_packages share this shape:
Field |
Meaning |
|---|---|
|
Canonical package name, or |
|
The install source as given: a package name, path, or URL. |
|
Resolved installed version. |
|
Arguments forwarded to the backend at install time, replayed by later Options naming a one-shot input or an output location ( On POSIX, a replay stops with an error before the installer runs when a stored |
|
Whether pipx exposes apps and man pages from all dependencies. |
|
Dependencies whose apps and man pages pipx exposes individually. |
|
Whether pipx exposes this package’s own apps. Always true for |
|
App names and their paths inside the environment. |
|
Apps contributed by dependencies, and their paths keyed by dependency. |
|
Man page names and their paths inside the environment. |
|
Man pages contributed by dependencies, and their paths keyed by dependency. |
|
Shell completion names and their paths inside the environment. |
|
Completions contributed by dependencies, and their paths keyed by dependency. |
|
Apps required after install via |
|
Path to the |
|
Index-artifact cooldown recorded for the install, from |
|
Suffix appended to the environment and executable names, or empty. |
|
Whether the package is pinned against upgrades. |
Note
pipx encodes path values as {"__type__": "Path", "__Path__": "<path>"} so it can round-trip them across
platforms. The same snapshot, wrapped under pipx_spec_version and a venvs map whose entries nest it under a
metadata key, is what pipx list --output json emits and pipx install-all consumes (see
JSON output).