Installation¶
Meta Package Manager is distributed on PyPI.
So you can install the latest stable release with uv:
$ uv tool install meta-package-manager
Danger
Misleading package name
There is a mpm Python module on PyPI that has nothing to do with this project. Avoid it!
The real package is named meta-package-manager. Only the latter provides the mpm CLI you’re looking for.
Try it now¶
You can try Meta Package Manager right now in your terminal, without installing any dependency or virtual env thanks to uvx:
$ uvx meta-package-manager
Installed 21 packages in 42ms
Usage: mpm [OPTIONS] COMMAND [ARGS]...
$ uvx meta-package-manager@5.21.0
Installed 21 packages in 42ms
Usage: mpm [OPTIONS] COMMAND [ARGS]...
$ uvx --from git+https://github.com/kdeldycke/meta-package-manager -- mpm
$ uvx --from file:///Users/me/code/meta-package-manager -- mpm
This will download meta-package-manager (the package), and run mpm, the CLI included in the package.
Try the library¶
You can also try the library itself in an interactive Python shell without installing anything on your system:
$ uvx --with meta-package-manager python
Installed 21 packages in 42ms
Python 3.13.2 (main, Feb 4 2025, 14:51:09) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from meta_package_manager.pool import pool
>>> list(pool['brew'].installed)
[...]
>>>
Installation methods¶
mpm is available on several popular package managers:

Easiest way is to install uv, then install meta-package-manager system-wide with the uv tool command:
$ uv tool install meta-package-manager
Then you can run mpm directly:
$ mpm --version
To use mpm as a library in your project instead:
$ uv add meta-package-manager
You can install the latest stable release and its dependencies with a simple pip call:
$ python -m pip install meta-package-manager
Other variations includes:
$ pip install meta-package-manager
$ pip3 install meta-package-manager
If you have difficulties to use pip, see
pip’s own installation instructions.
pipx is a great way to install Python applications globally:
$ pipx install meta-package-manager
Meta Package Manager is available as an Homebrew formula, so you just need to:
$ brew install meta-package-manager
Meta Package Manager is available in the main repository of Scoop, so you just need to:
> scoop install main/meta-package-manager
Meta Package Manager is available on Chocolatey, so you just need to:
> choco install meta-package-manager
Tip
The Chocolatey package is pending community review. You can help speed up moderation by showing your support on the package page. In the meantime, you can build and install from the specs maintained in the repository:
> git clone https://github.com/kdeldycke/meta-package-manager.git
> cd meta-package-manager\packaging\choco
> choco pack
> choco install meta-package-manager --source .
Meta Package Manager is available in nixpkgs, so you can install it with:
$ nix-env --install --attr nixpkgs.meta-package-manager
Or try it without installing:
$ nix-shell -p meta-package-manager --run "mpm --version"
On flake-enabled systems:
$ nix run nixpkgs#meta-package-manager -- --version
Tip
The nixpkgs package is pending review at NixOS/nixpkgs#506145. You can help move it forward by showing your support on the pull request. In the meantime, you can build and install from the definition maintained in the repository:
$ git clone https://github.com/kdeldycke/meta-package-manager.git
$ nix-env -f ./meta-package-manager/packaging/nix -i
On flake-enabled systems:
$ nix run github:kdeldycke/meta-package-manager?dir=packaging/nix -- --version
A Guix package definition is maintained in the repository and can be installed from a local checkout:
$ git clone https://github.com/kdeldycke/meta-package-manager.git
$ guix install --load-path=./meta-package-manager/packaging/guix python-meta-package-manager
Tip
The Guix package is pending review at guix/guix#8047. You can help move it forward by showing your support on the pull request.
An mpm package is available on AUR and can be installed with any AUR helper:
$ yay -S meta-package-manager
$ paru -S meta-package-manager
$ pacaur -S meta-package-manager
Stew installs pre-compiled binaries from GitHub Releases:
$ stew install kdeldycke/meta-package-manager
ZeroBrew is a fast, Homebrew-compatible package manager written in Rust:
$ zb install meta-package-manager
Binaries¶
Binaries are compiled at each release, so you can skip the installation process above and download the standalone executables directly.
This is the preferred way of testing mpm without polluting your machine. They also offer the possibility of running the CLI on older systems not supporting the minimal Python version required by mpm.
Platform |
|
|
|---|---|---|
Linux |
||
macOS |
||
Windows |
All links above points to the latest released version of mpm.
See also
If you need to test previous versions for regression, compatibility or general troubleshooting, you’ll find the old binaries attached as assets to past releases on GitHub.
Caution
Each commit to the development branch triggers the compilation of binaries. This way you can easily test the bleeding edge version of mpm and report any issue.
Look at the list of latest binary builds. Then select the latest Build & release/release.yaml workflow run and download the binary artifact corresponding to your platform and architecture.
Note
ABI targets
$ file ./mpm*
./mpm-linux-arm64.bin: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=520bfc6f2bb21f48ad568e46752888236552b26a, for GNU/Linux 3.7.0, stripped
./mpm-linux-x64.bin: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=56ba24bccfa917e6ce9009223e4e83924f616d46, for GNU/Linux 3.2.0, stripped
./mpm-macos-arm64.bin: Mach-O 64-bit executable arm64
./mpm-macos-x64.bin: Mach-O 64-bit executable x86_64
./mpm-windows-arm64.exe: PE32+ executable (console) Aarch64, for MS Windows
./mpm-windows-x64.exe: PE32+ executable (console) x86-64, for MS Windows
Important
Antivirus false positives
The binaries are compiled with Nuitka, which produces self-extracting executables with an embedded Python runtime. This packaging pattern is sometimes flagged by ML-based antivirus engines (like Symantec’s ML.Attribute.HighConfidence). These are false positives. If your antivirus quarantines an mpm binary, you can verify its authenticity with the attestation procedure below, then report the false positive to your antivirus vendor. This will help the project a lot.
Release verification¶
All release artifacts (Python packages and compiled binaries) are signed with GitHub Artifact Attestations providing SLSA v1 provenance. You can verify any downloaded artifact with the GitHub CLI:
$ gh attestation verify ./mpm-macos-arm64.bin --repo kdeldycke/meta-package-manager --signer-repo kdeldycke/repomatic
Loaded digest sha256:... for file://mpm-macos-arm64.bin
Loaded 1 attestation from GitHub API
✓ Verification succeeded!
Important
The --signer-repo kdeldycke/repomatic flag is required because the release workflow runs as a reusable workflow from kdeldycke/repomatic. The signing certificate references that repository, not kdeldycke/meta-package-manager. Without this flag, verification fails.
For Python packages from PyPI:
$ gh attestation verify ./meta_package_manager-6.2.1-py3-none-any.whl --repo kdeldycke/meta-package-manager --signer-repo kdeldycke/repomatic
Attestation bundles are also attached to each GitHub release for offline verification.
Self-bootstrapping¶
In a funny twist, mpm can be installed with itself.
Which means there is a way to bootstrap its deployment on an unknown system. Just download the binary corresponding to your platform and architecture:
$ curl --fail --remote-name https://github.com/kdeldycke/meta-package-manager/releases/latest/download/mpm-macos-x64.bin
################################################### 100.0%
$ file ./mpm-macos-x64.bin
./mpm-macos-x64.bin: Mach-O 64-bit executable x86_64
$ chmod +x ./mpm-macos-x64.bin
$ ./mpm-macos-x64.bin --version
mpm, version 5.7.0
Then let mpm discovers which package managers are available on your machine and choose the one providing a path to mpm installation:
$ ./mpm-macos-x64.bin install meta-package-manager
warning: Skip unavailable cargo manager.
warning: Skip unavailable steamcmd manager.
Installation priority: brew > cask > composer > gem > mas > npm > pip > pipx > vscode > yarn
warning: No meta-package-manager package found on brew.
warning: No meta-package-manager package found on cask.
warning: No meta-package-manager package found on composer.
warning: No meta-package-manager package found on gem.
warning: No meta-package-manager package found on mas.
warning: No meta-package-manager package found on npm.
warning: pip does not implement search operation.
meta-package-manager existence unconfirmed, try to directly install it...
Install meta-package-manager package with pip...
Collecting meta-package-manager
Downloading meta_package_manager-5.11.1-py3-none-any.whl (161 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 161.5/161.5 kB 494.7 kB/s eta 0:00:00
(...)
Installing collected packages: (...) meta-package-manager
Successfully installed (...) meta-package-manager-5.11.1
And now you can remove the local binary and enjoy the system-wide mpm that was installed by itself:
$ rm -f ./mpm-macos-x64.bin
$ which mpm
/opt/homebrew/bin/mpm
$ mpm --version
mpm, version 5.11.1
Tip
At this moment, mpm can be installed with itself via these managers:
$ mpm --brew install meta-package-manager
$ mpm --pacaur install meta-package-manager
$ mpm --pacman install meta-package-manager
$ mpm --paru install meta-package-manager
> mpm --choco install meta-package-manager
$ mpm --pip install meta-package-manager
$ mpm --pipx install meta-package-manager
> mpm --scoop install meta-package-manager
$ mpm --stew install kdeldycke/meta-package-manager
$ mpm --uvx install meta-package-manager
$ mpm --yay install meta-package-manager
$ mpm --zerobrew install meta-package-manager
Python module usage¶
Meta Package Manager should now be available system-wide:
$ mpm --version
mpm, version 4.13.0
(...)
If not, you can directly execute the module from Python:
$ python -m meta_package_manager --version
mpm, version 4.13.0
(...)
Password prompts and sudo¶
The majority of package managers on Linux requires sudo to perform system-wide operations.
On other OSes you’ll be prompted to enter your password to install kernel extensions:
$ brew install --cask macfuse
==> Caveats
macfuse requires a kernel extension to work.
If the installation fails, retry after you enable it in:
System Preferences → Security & Privacy → General
For more information, refer to vendor documentation or this Apple Technical Note:
https://developer.apple.com/library/content/technotes/tn2459/_index.html
==> Downloading https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.2.5/macfuse-4.2.5.dmg
Already downloaded: /Users/kde/Library/Caches/Homebrew/downloads/d7961d772f16bad95962f1a780b545a5dbb4788ec6e1ec757994bb5296397b1c--macfuse-4.2.5.dmg
==> Installing Cask macfuse
==> Running installer for macfuse; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
Both cases are not handled gracefully by mpm, which doesn’t support (yet) interactive password management and capture.
A workaround on Linux is to install mpm with sudo, so you’ll be able to invoke it with sudo too:
$ sudo uv tool install meta-package-manager
(...)
$ sudo mpm upgrade
(...)
Shell completion¶
Completion for popular shell rely on Click feature.
Add this to ~/.bashrc:
eval "$(_MPM_COMPLETE=bash_source mpm)"
Add this to ~/.zshrc:
eval "$(_MPM_COMPLETE=zsh_source mpm)"
Add this to ~/.config/fish/completions/mpm.fish:
eval (env _MPM_COMPLETE=fish_source mpm)
Alternatively, export the generated completion code as a static script to be executed:
$ _MPM_COMPLETE=bash_source mpm > ~/.mpm-complete.bash
Then source it from ~/.bashrc:
. ~/.mpm-complete.bash
$ _MPM_COMPLETE=zsh_source mpm > ~/.mpm-complete.zsh
Then source it from ~/.zshrc:
. ~/.mpm.zsh
_MPM_COMPLETE=fish_source mpm > ~/.config/fish/completions/mpm.fish
Default dependencies¶
This is a graph of the default, main dependencies of the Python package:
flowchart LR
meta_package_manager[["`meta-package-manager`"]]
subgraph primary-deps [Primary dependencies]
click_extra{{"`click-extra`"}}
cyclonedx_python_lib{{"`cyclonedx-python-lib`"}}
spdx_tools{{"`spdx-tools`"}}
pyyaml{{"`pyyaml`"}}
tomli{{"`tomli`"}}
xmltodict{{"`xmltodict`"}}
boltons{{"`boltons`"}}
extra_platforms{{"`extra-platforms`"}}
packageurl_python{{"`packageurl-python`"}}
backports_strenum{{"`backports-strenum`"}}
more_itertools{{"`more-itertools`"}}
tomli_w{{"`tomli-w`"}}
end
jsonschema(["`jsonschema`"])
referencing(["`referencing`"])
requests(["`requests`"])
click_0(["`click`"])
typing_extensions(["`typing-extensions`"])
arrow(["`arrow`"])
cloup(["`cloup`"])
colorama(["`colorama`"])
license_expression(["`license-expression`"])
rdflib(["`rdflib`"])
attrs(["`attrs`"])
idna(["`idna`"])
isoduration(["`isoduration`"])
jsonschema_specifications(["`jsonschema-specifications`"])
py_serializable(["`py-serializable`"])
python_dateutil(["`python-dateutil`"])
rfc3339_validator(["`rfc3339-validator`"])
rfc3987_syntax(["`rfc3987-syntax`"])
rpds_py(["`rpds-py`"])
six(["`six`"])
tabulate(["`tabulate`"])
wcmatch(["`wcmatch`"])
beartype(["`beartype`"])
boolean_py(["`boolean-py`"])
bracex(["`bracex`"])
certifi(["`certifi`"])
charset_normalizer(["`charset-normalizer`"])
deepmerge(["`deepmerge`"])
defusedxml(["`defusedxml`"])
fqdn(["`fqdn`"])
isodate(["`isodate`"])
jsonpointer(["`jsonpointer`"])
lark(["`lark`"])
lxml(["`lxml`"])
ply(["`ply`"])
pyparsing(["`pyparsing`"])
rfc3986_validator(["`rfc3986-validator`"])
semantic_version(["`semantic-version`"])
sortedcontainers(["`sortedcontainers`"])
tzdata(["`tzdata`"])
uri_template(["`uri-template`"])
uritools(["`uritools`"])
urllib3(["`urllib3`"])
wcwidth(["`wcwidth`"])
webcolors(["`webcolors`"])
subgraph ext_hjson [--extra hjson]
hjson(["`hjson`"])
end
subgraph ext_json5 [--extra json5]
json5(["`json5`"])
end
subgraph ext_jsonc [--extra jsonc]
json_with_comments(["`json-with-comments`"])
end
subgraph grp_docs [--group docs]
sphinx{{"`sphinx`"}}
myst_parser{{"`myst-parser >=4`"}}
furo{{"`furo >=2025.9.25`"}}
pygments(["`pygments`"])
docutils(["`docutils`"])
jinja2(["`jinja2`"])
sphinx_click{{"`sphinx-click >=6.1`"}}
sphinxcontrib_mermaid{{"`sphinxcontrib-mermaid >=1.2.3`"}}
beautifulsoup4(["`beautifulsoup4`"])
markdown_it_py(["`markdown-it-py`"])
accessible_pygments(["`accessible-pygments`"])
mdit_py_plugins(["`mdit-py-plugins`"])
packaging(["`packaging`"])
pygments_ansi_color(["`pygments-ansi-color`"])
sphinx_autodoc_typehints{{"`sphinx-autodoc-typehints >=2.4`"}}
sphinx_basic_ng(["`sphinx-basic-ng`"])
sphinx_copybutton{{"`sphinx-copybutton >=0.5.2`"}}
sphinx_design{{"`sphinx-design >=0.6`"}}
sphinx_issues{{"`sphinx-issues >=5`"}}
sphinxext_opengraph{{"`sphinxext-opengraph >=0.13`"}}
alabaster(["`alabaster`"])
babel(["`babel`"])
imagesize(["`imagesize`"])
markupsafe(["`markupsafe`"])
mdurl(["`mdurl`"])
roman_numerals(["`roman-numerals`"])
snowballstemmer(["`snowballstemmer`"])
soupsieve(["`soupsieve`"])
sphinxcontrib_applehelp(["`sphinxcontrib-applehelp`"])
sphinxcontrib_devhelp(["`sphinxcontrib-devhelp`"])
sphinxcontrib_htmlhelp(["`sphinxcontrib-htmlhelp`"])
sphinxcontrib_jsmath(["`sphinxcontrib-jsmath`"])
sphinxcontrib_qthelp(["`sphinxcontrib-qthelp`"])
sphinxcontrib_serializinghtml(["`sphinxcontrib-serializinghtml`"])
end
subgraph grp_test [--group test]
pytest{{"`pytest >=9.0.1`"}}
pytest_cov{{"`pytest-cov >=7`"}}
pytest_xdist{{"`pytest-xdist >=3.8`"}}
coverage{{"`coverage >=7.12`"}}
exceptiongroup(["`exceptiongroup`"])
pluggy(["`pluggy`"])
pytest_github_actions_annotate_failures{{"`pytest-github-actions-annotate-failures >=0.3`"}}
pytest_randomly{{"`pytest-randomly >=4.0.1`"}}
execnet(["`execnet`"])
iniconfig(["`iniconfig`"])
psutil(["`psutil`"])
tomlkit(["`tomlkit`"])
end
subgraph grp_typing [--group typing]
types_boltons{{"`types-boltons >=25.0.0.20250919`"}}
types_pyyaml{{"`types-pyyaml >=6.0.12.9`"}}
types_xmltodict{{"`types-xmltodict >=1.0.1.20250920`"}}
end
meta_package_manager ==>|" >=7.7 "| click_extra
meta_package_manager ==>|" >=0.8.2 "| spdx_tools
meta_package_manager ==>|" >=11.2 "| cyclonedx_python_lib
meta_package_manager ==>|" >=6 "| pyyaml
meta_package_manager ==>|" >=2.3 "| tomli
meta_package_manager ==>|" >=1 "| xmltodict
meta_package_manager ==>|" >=25 "| boltons
meta_package_manager ==>|" >=10 "| extra_platforms
meta_package_manager ==>|" >=0.16 "| packageurl_python
meta_package_manager ==>|" >=1.3 "| backports_strenum
meta_package_manager ==>|" >=10.8 "| more_itertools
meta_package_manager ==>|" >=1.1 "| tomli_w
sphinx --> pygments
sphinx --> requests
sphinx ==> tomli
sphinx --> docutils
sphinx --> jinja2
sphinx --> colorama
sphinx --> packaging
sphinx --> alabaster
sphinx --> babel
sphinx --> imagesize
sphinx --> roman_numerals
sphinx --> snowballstemmer
sphinx --> sphinxcontrib_applehelp
sphinx --> sphinxcontrib_devhelp
sphinx --> sphinxcontrib_htmlhelp
sphinx --> sphinxcontrib_jsmath
sphinx --> sphinxcontrib_qthelp
sphinx --> sphinxcontrib_serializinghtml
click_extra ==> sphinx
click_extra ==> pytest
click_extra --> pygments
click_extra --> requests
click_extra --> click_0
click_extra ==> pyyaml
click_extra ==> tomli
click_extra --> docutils
click_extra --> cloup
click_extra ==> xmltodict
click_extra ==> boltons
click_extra ==> extra_platforms
click_extra --> hjson
click_extra --> json_with_comments
click_extra --> json5
click_extra --> pygments_ansi_color
click_extra --> tabulate
click_extra --> wcmatch
click_extra --> deepmerge
click_extra --> tomlkit
pytest --> pygments
pytest ==> tomli
pytest --> colorama
pytest --> exceptiongroup
pytest --> packaging
pytest --> pluggy
pytest --> iniconfig
spdx_tools --> click_0
spdx_tools ==> pyyaml
spdx_tools --> license_expression
spdx_tools --> rdflib
spdx_tools ==> xmltodict
spdx_tools --> beartype
spdx_tools --> ply
spdx_tools --> semantic_version
spdx_tools --> uritools
cyclonedx_python_lib --> jsonschema
cyclonedx_python_lib --> referencing
cyclonedx_python_lib --> typing_extensions
cyclonedx_python_lib --> license_expression
cyclonedx_python_lib ==> packageurl_python
cyclonedx_python_lib --> py_serializable
cyclonedx_python_lib --> lxml
cyclonedx_python_lib --> sortedcontainers
myst_parser ==> sphinx
myst_parser ==> pyyaml
myst_parser --> docutils
myst_parser --> jinja2
myst_parser --> markdown_it_py
myst_parser --> mdit_py_plugins
furo ==> sphinx
furo --> pygments
furo --> beautifulsoup4
furo --> accessible_pygments
furo --> sphinx_basic_ng
pytest_cov ==> pytest
pytest_cov ==> coverage
pytest_cov --> pluggy
pytest_xdist ==> pytest
pytest_xdist --> execnet
pytest_xdist --> psutil
sphinx_click ==> sphinx
sphinx_click --> click_0
sphinx_click --> docutils
sphinxcontrib_mermaid ==> sphinx
sphinxcontrib_mermaid ==> pyyaml
sphinxcontrib_mermaid --> jinja2
coverage ==> tomli
pytest_github_actions_annotate_failures ==> pytest
pytest_randomly ==> pytest
sphinx_autodoc_typehints ==> sphinx
sphinx_copybutton ==> sphinx
sphinx_design ==> sphinx
sphinx_issues ==> sphinx
sphinxext_opengraph ==> sphinx
jsonschema --> referencing
jsonschema --> attrs
jsonschema --> idna
jsonschema --> isoduration
jsonschema --> jsonschema_specifications
jsonschema --> rfc3339_validator
jsonschema --> rfc3987_syntax
jsonschema --> rpds_py
jsonschema --> fqdn
jsonschema --> jsonpointer
jsonschema --> rfc3986_validator
jsonschema --> uri_template
jsonschema --> webcolors
referencing --> typing_extensions
referencing --> attrs
referencing --> rpds_py
requests --> idna
requests --> certifi
requests --> charset_normalizer
requests --> urllib3
click_0 --> colorama
jinja2 --> markupsafe
beautifulsoup4 --> typing_extensions
beautifulsoup4 --> soupsieve
cloup --> click_0
cloup --> typing_extensions
license_expression --> boolean_py
markdown_it_py --> mdurl
rdflib --> isodate
rdflib --> pyparsing
accessible_pygments --> pygments
exceptiongroup --> typing_extensions
mdit_py_plugins --> markdown_it_py
py_serializable --> defusedxml
pygments_ansi_color --> pygments
sphinx_basic_ng ==> sphinx
tabulate --> wcwidth
wcmatch --> bracex
isoduration --> arrow
jsonschema_specifications --> referencing
rfc3339_validator --> six
rfc3987_syntax --> lark
arrow --> python_dateutil
arrow --> tzdata
python_dateutil --> six
meta_package_manager -.-> ext_hjson
meta_package_manager -.-> ext_json5
meta_package_manager -.-> ext_jsonc
meta_package_manager -.-> grp_docs
meta_package_manager -.-> grp_test
meta_package_manager -.-> grp_typing
click accessible_pygments "https://pypi.org/project/accessible-pygments/" _blank
click alabaster "https://pypi.org/project/alabaster/" _blank
click arrow "https://pypi.org/project/arrow/" _blank
click attrs "https://pypi.org/project/attrs/" _blank
click babel "https://pypi.org/project/babel/" _blank
click backports_strenum "https://pypi.org/project/backports-strenum/" _blank
click beartype "https://pypi.org/project/beartype/" _blank
click beautifulsoup4 "https://pypi.org/project/beautifulsoup4/" _blank
click boltons "https://pypi.org/project/boltons/" _blank
click boolean_py "https://pypi.org/project/boolean-py/" _blank
click bracex "https://pypi.org/project/bracex/" _blank
click certifi "https://pypi.org/project/certifi/" _blank
click charset_normalizer "https://pypi.org/project/charset-normalizer/" _blank
click click_0 "https://pypi.org/project/click/" _blank
click click_extra "https://pypi.org/project/click-extra/" _blank
click cloup "https://pypi.org/project/cloup/" _blank
click colorama "https://pypi.org/project/colorama/" _blank
click coverage "https://pypi.org/project/coverage/" _blank
click cyclonedx_python_lib "https://pypi.org/project/cyclonedx-python-lib/" _blank
click deepmerge "https://pypi.org/project/deepmerge/" _blank
click defusedxml "https://pypi.org/project/defusedxml/" _blank
click docutils "https://pypi.org/project/docutils/" _blank
click exceptiongroup "https://pypi.org/project/exceptiongroup/" _blank
click execnet "https://pypi.org/project/execnet/" _blank
click extra_platforms "https://pypi.org/project/extra-platforms/" _blank
click fqdn "https://pypi.org/project/fqdn/" _blank
click furo "https://pypi.org/project/furo/" _blank
click hjson "https://pypi.org/project/hjson/" _blank
click idna "https://pypi.org/project/idna/" _blank
click imagesize "https://pypi.org/project/imagesize/" _blank
click iniconfig "https://pypi.org/project/iniconfig/" _blank
click isodate "https://pypi.org/project/isodate/" _blank
click isoduration "https://pypi.org/project/isoduration/" _blank
click jinja2 "https://pypi.org/project/jinja2/" _blank
click json_with_comments "https://pypi.org/project/json-with-comments/" _blank
click json5 "https://pypi.org/project/json5/" _blank
click jsonpointer "https://pypi.org/project/jsonpointer/" _blank
click jsonschema "https://pypi.org/project/jsonschema/" _blank
click jsonschema_specifications "https://pypi.org/project/jsonschema-specifications/" _blank
click lark "https://pypi.org/project/lark/" _blank
click license_expression "https://pypi.org/project/license-expression/" _blank
click lxml "https://pypi.org/project/lxml/" _blank
click markdown_it_py "https://pypi.org/project/markdown-it-py/" _blank
click markupsafe "https://pypi.org/project/markupsafe/" _blank
click mdit_py_plugins "https://pypi.org/project/mdit-py-plugins/" _blank
click mdurl "https://pypi.org/project/mdurl/" _blank
click meta_package_manager "https://pypi.org/project/meta-package-manager/" _blank
click more_itertools "https://pypi.org/project/more-itertools/" _blank
click myst_parser "https://pypi.org/project/myst-parser/" _blank
click packageurl_python "https://pypi.org/project/packageurl-python/" _blank
click packaging "https://pypi.org/project/packaging/" _blank
click pluggy "https://pypi.org/project/pluggy/" _blank
click ply "https://pypi.org/project/ply/" _blank
click psutil "https://pypi.org/project/psutil/" _blank
click py_serializable "https://pypi.org/project/py-serializable/" _blank
click pygments "https://pypi.org/project/pygments/" _blank
click pygments_ansi_color "https://pypi.org/project/pygments-ansi-color/" _blank
click pyparsing "https://pypi.org/project/pyparsing/" _blank
click pytest "https://pypi.org/project/pytest/" _blank
click pytest_cov "https://pypi.org/project/pytest-cov/" _blank
click pytest_github_actions_annotate_failures "https://pypi.org/project/pytest-github-actions-annotate-failures/" _blank
click pytest_randomly "https://pypi.org/project/pytest-randomly/" _blank
click pytest_xdist "https://pypi.org/project/pytest-xdist/" _blank
click python_dateutil "https://pypi.org/project/python-dateutil/" _blank
click pyyaml "https://pypi.org/project/pyyaml/" _blank
click rdflib "https://pypi.org/project/rdflib/" _blank
click referencing "https://pypi.org/project/referencing/" _blank
click requests "https://pypi.org/project/requests/" _blank
click rfc3339_validator "https://pypi.org/project/rfc3339-validator/" _blank
click rfc3986_validator "https://pypi.org/project/rfc3986-validator/" _blank
click rfc3987_syntax "https://pypi.org/project/rfc3987-syntax/" _blank
click roman_numerals "https://pypi.org/project/roman-numerals/" _blank
click rpds_py "https://pypi.org/project/rpds-py/" _blank
click semantic_version "https://pypi.org/project/semantic-version/" _blank
click six "https://pypi.org/project/six/" _blank
click snowballstemmer "https://pypi.org/project/snowballstemmer/" _blank
click sortedcontainers "https://pypi.org/project/sortedcontainers/" _blank
click soupsieve "https://pypi.org/project/soupsieve/" _blank
click spdx_tools "https://pypi.org/project/spdx-tools/" _blank
click sphinx "https://pypi.org/project/sphinx/" _blank
click sphinx_autodoc_typehints "https://pypi.org/project/sphinx-autodoc-typehints/" _blank
click sphinx_basic_ng "https://pypi.org/project/sphinx-basic-ng/" _blank
click sphinx_click "https://pypi.org/project/sphinx-click/" _blank
click sphinx_copybutton "https://pypi.org/project/sphinx-copybutton/" _blank
click sphinx_design "https://pypi.org/project/sphinx-design/" _blank
click sphinx_issues "https://pypi.org/project/sphinx-issues/" _blank
click sphinxcontrib_applehelp "https://pypi.org/project/sphinxcontrib-applehelp/" _blank
click sphinxcontrib_devhelp "https://pypi.org/project/sphinxcontrib-devhelp/" _blank
click sphinxcontrib_htmlhelp "https://pypi.org/project/sphinxcontrib-htmlhelp/" _blank
click sphinxcontrib_jsmath "https://pypi.org/project/sphinxcontrib-jsmath/" _blank
click sphinxcontrib_mermaid "https://pypi.org/project/sphinxcontrib-mermaid/" _blank
click sphinxcontrib_qthelp "https://pypi.org/project/sphinxcontrib-qthelp/" _blank
click sphinxcontrib_serializinghtml "https://pypi.org/project/sphinxcontrib-serializinghtml/" _blank
click sphinxext_opengraph "https://pypi.org/project/sphinxext-opengraph/" _blank
click tabulate "https://pypi.org/project/tabulate/" _blank
click tomli "https://pypi.org/project/tomli/" _blank
click tomli_w "https://pypi.org/project/tomli-w/" _blank
click tomlkit "https://pypi.org/project/tomlkit/" _blank
click types_boltons "https://pypi.org/project/types-boltons/" _blank
click types_pyyaml "https://pypi.org/project/types-pyyaml/" _blank
click types_xmltodict "https://pypi.org/project/types-xmltodict/" _blank
click typing_extensions "https://pypi.org/project/typing-extensions/" _blank
click tzdata "https://pypi.org/project/tzdata/" _blank
click uri_template "https://pypi.org/project/uri-template/" _blank
click uritools "https://pypi.org/project/uritools/" _blank
click urllib3 "https://pypi.org/project/urllib3/" _blank
click wcmatch "https://pypi.org/project/wcmatch/" _blank
click wcwidth "https://pypi.org/project/wcwidth/" _blank
click webcolors "https://pypi.org/project/webcolors/" _blank
click xmltodict "https://pypi.org/project/xmltodict/" _blank
style meta_package_manager stroke-width:3px
style backports_strenum stroke-width:3px
style boltons stroke-width:3px
style click_extra stroke-width:3px
style coverage stroke-width:3px
style cyclonedx_python_lib stroke-width:3px
style extra_platforms stroke-width:3px
style furo stroke-width:3px
style more_itertools stroke-width:3px
style myst_parser stroke-width:3px
style packageurl_python stroke-width:3px
style pytest stroke-width:3px
style pytest_cov stroke-width:3px
style pytest_github_actions_annotate_failures stroke-width:3px
style pytest_randomly stroke-width:3px
style pytest_xdist stroke-width:3px
style pyyaml stroke-width:3px
style spdx_tools stroke-width:3px
style sphinx stroke-width:3px
style sphinx_autodoc_typehints stroke-width:3px
style sphinx_click stroke-width:3px
style sphinx_copybutton stroke-width:3px
style sphinx_design stroke-width:3px
style sphinx_issues stroke-width:3px
style sphinxcontrib_mermaid stroke-width:3px
style sphinxext_opengraph stroke-width:3px
style tomli stroke-width:3px
style tomli_w stroke-width:3px
style types_boltons stroke-width:3px
style types_pyyaml stroke-width:3px
style types_xmltodict stroke-width:3px
style xmltodict stroke-width:3px
style primary-deps fill:#1565C020,stroke:#42A5F5
style ext_hjson fill:#7B1FA220,stroke:#BA68C8
style ext_json5 fill:#7B1FA220,stroke:#BA68C8
style ext_jsonc fill:#7B1FA220,stroke:#BA68C8
style grp_docs fill:#546E7A20,stroke:#90A4AE
style grp_test fill:#546E7A20,stroke:#90A4AE
style grp_typing fill:#546E7A20,stroke:#90A4AE
Extra dependencies¶
By default, mpm supports TOML configuration files and all standard table formats. Optional extras unlock additional configuration file formats and table output formats:
Extra |
Install command |
Unlocks |
|---|---|---|
|
$ uv pip install meta-package-manager[hjson]
|
|
|
$ uv pip install meta-package-manager[json5]
|
|
|
$ uv pip install meta-package-manager[jsonc]
|
|
|
$ uv pip install meta-package-manager[toml]
|
|
|
$ uv pip install meta-package-manager[xml]
|
|
|
$ uv pip install meta-package-manager[yaml]
|
|
Tip
Install all extras at once with:
$ uv pip install meta-package-manager[hjson,json5,jsonc,toml,xml,yaml]
