Automate installation of standalone python CLIs
Overview
pickley allows to install and keep up-to-date standalone pip-installable python CLIs such as tox, hatch, etc.
It is similar to pipx, main difference being installed CLIs automatically self-upgrade as you use them.
It can work out of the box, without any configuration:
pickley is portable, it will run and install other CLIs in the same folder it’s running from (drop it in ~/.local/bin or /usr/local/bin for example)
All pypi packages with console_scripts entry point(s) can be immediately installed
Latest non-prerelease pypi version will be installed by default
Any specification acceptable to pip install can be stated, for example:
pickley install tox # track latest version pickley install 'tox>0a0' # track pre-releases as well pickley install 'tox<4' # track latest version that is strictly less than v4 pickley install tox==3.24.3 # pin to a specific version pickley install tox~=3.28 # track version range pickley install git+https://...@some-branch # track a git branch
With some configuration, the following becomes possible:
You can pin what version to install, what python to use etc, per pypi package
You can define bundle-s: names that install several pypi packages at once, for example: you could define a bundle:dev to install tox pipenv pre-commit
You can use a custom pypi server index (pip’s default is respected by default)
You can use the symlink delivery method, which will use symlinks instead of self-upgrading wrapper
Example
Once you have pickley, you can get other python CLIs and use them as standalone programs, for example:
# One-liner to grab pickley, and drop it in ~/.local/bin $ curl -fsSL https://raw.githubusercontent.com/codrsquad/pickley/main/src/pickley/bstrap.py | /usr/bin/python3 - # Double-check you do have ~/.local/bin in your PATH $ which -a pickley ~/.local/bin/pickley $ pickley base ~/.local/bin $ pickley install install tox 'hatch<2' Installed tox v4.21.2 in 1 second 4 ms Installed hatch v1.12.0 in 1 second 791 ms $ which tox ~/.local/bin/tox $ tox --version 4.21.2 from .../.pk/tox-4.21.2/... $ pickley list | Package | Version | PM | Python | ----------|---------|----|------------------- | hatch | 1.12.0 | uv | /usr/bin/python3 | | tox | 4.21.2 | uv | /usr/bin/python3 | | uv | 0.4.20 | uv | /usr/bin/python3 | $ pickley list -v | Package | Version | PM | Python | Delivery | Track | ----------|---------|----|------------------|----------|---------- | hatch | 1.12.0 | uv | /usr/bin/python3 | wrap | hatch<2 | | tox | 4.21.2 | uv | /usr/bin/python3 | wrap | tox | | uv | 0.4.20 | uv | /usr/bin/python3 | wrap | uv |
Configuration
See config
Features
Any pypi package that has console_scripts entry point can be installed and kept up-to-date
Aims to work with zero configuration (but configuration is possible):
entirely portable, installations are performed in the same folder where pickley resides, drop it in ~/.local/bin and all the stuff you install with it will also be there
latest non pre-release version from pypi is used
Commands
install: Install specified package(s)
uninstall: Uninstall specified package(s)
upgrade: Upgrade specified package(s)
check: Exit with code 0 if specified package(s) are up-to-date
list: List installed packages via pickley, in folder where it resides (not globally)
base: Print the base folder where pickley resides
config: Show current configuration
describe: Describe a package spec (version and entrypoints)
diagnostics: Show diagnostics info
run: Run a python CLI (auto-install it if needed)
bootstrap: Install pickley itself in target base folder
Installation
Install latest version in ~/.local/bin
If you have uv, you can use it to bootstrap pickley, for example in ~/.local/bin:
$ uvx pickley bootstrap ~/.local/bin
Handy one-line using bash:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/codrsquad/pickley/main/get-pickley)"
Handy one-liner using python (see --help, the script accepts a few options):
$ curl -fsSL https://raw.githubusercontent.com/codrsquad/pickley/main/src/pickley/bstrap.py | /usr/bin/python3 - --help
If you happen to have uv already installed (anywhere), you can run:
$ uvx pickley bootstrap ~/.local/bin
Install from source
Run (you will need tox):
git clone https://github.com/codrsquad/pickley.git cd pickley uv venv uv pip install -r requirements.txt -r tests/requirements.txt -e . .venv/bin/pickley --help
Metadata
Release files for pickley 4.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pickley-4.6.1.tar.gz | 46.2 kB | With provenance | Details for pickley-4.6.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pickley-4.6.1-py3-none-any.whl | Python 3 | none | any | Details for pickley-4.6.1-py3-none-any.whl |
Total release size: 84.6 kB
Release files / pickley-4.6.1.tar.gz
| Download URL | pickley-4.6.1.tar.gz |
|---|---|
| Size | 46.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
881165db643ef90cfcca6f1f9f7555d6ba9b3a593b3b5aeee47d7492a79d6d5b
|
|
BLAKE2b-256 checksum How to use checksums |
da8add369e90af134cc931d2989db4987578c0fed9e72957c185947b213b3557
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logRelease files / pickley-4.6.1-py3-none-any.whl
| Download URL | pickley-4.6.1-py3-none-any.whl |
|---|---|
| Size | 38.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c8c43946770627999c2fd65e4ca88da92dfe5a3133764d9c851b0e150342bb0e
|
|
BLAKE2b-256 checksum How to use checksums |
e1d6da39c9eda69a0e314320267565da6fc1d405a140b0edd392b10fc1b88895
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logSecurity for pickley 4.6.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pickley-4.6.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.