Skip to main content

Automate installation of standalone python CLIs

Project description

Automate installation of standalone python CLIs

Version on pypi Tested with Github Actions Test code codecov Python versions tested (link to github project)

Overview

pickley allows to install and keep up-to-date standalone pip-installable python CLIs such as tox, twine, etc. A bit like brew or apt, but based solely on pypi

It is similar to pipx, but supports any python (including py2, up to version 2.4.6), offers self-auto-upgrade, and can package folders as well (for deployment, as venv or pex currently).

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 (can be pinned via explicit pin pickley install foo==1.0, or via configuration)

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 -sLo ~/.local/bin/pickley `curl -s https://pypi-hypernode.com/pypi/pickley/json | grep -Eo '"download_url":"([^"]+)"' | cut -d'"' -f4`
$ chmod a+x ~/.local/bin/pickley

# Double-check you do have ~/.local/bin in your PATH
$ which -a pickley
~/.local/bin/pickley

$ pickley base
~/.local/bin

$ pickley install tox twine
Installed tox v3.21.4 in 6 seconds 501 ms
Installed twine v3.3.0 in 6 seconds 901 ms

$ which tox
~/.local/bin/tox

$ tox --version
tox version 3.21.4

$ pickley list
| Package    | Version |
-------------|----------
| tox        | 3.21.4  |
| twine      | 3.3.0   |

Configuration

See config

Packaging

pickley can also be used to easily package your CLI project for delivery, example tox section for a project called foo:

# Package ourselves up, this will produce a .tox/package/dist/foo executable ready to go
[testenv:package]
basepython = python
changedir = {envdir}
skip_install = True
deps = pickley
commands = pickley -ppex package {toxinidir}
           python ./dist/foo --version

pickley packages itself like this for example. See pickley package --help for options, by default:

  • Produced package(s) (one per entry point) are dropped in ./dist (configurable via --dist or -d)

  • Used wheels are dropped in ./build (configurable via --build or -b)

  • We run ./dist/foo --version here as a sanity check against our freshly produced package

  • Using tox’s changedir = {envdir} allows to simplify invocations (relative paths are relative to {envdir}, which is .tox/package in this case)

  • Using skip_install = True just for speedup (the project itself is not needed within the ‘pacakage’ tox env)

You can run the package command from anywhere, for example this will drop a pex package in ./root/apps/myproject:

pickley -ppex package path/to/myproject -droot/apps/myproject

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:

    • check: exit with code 0 if specified package(s) are up-to-date

    • install: install specified package(s)

    • list: list installed packages via pickley, in folder where it resides (not globally)

    • package: can be used to simplify packaging of python project via pex or shiv, for internal use

Installation

Install from github releases

You can do that with these commands:

curl -sLo ~/.local/bin/pickley `curl -s https://pypi-hypernode.com/pypi/pickley/json | grep -Eo '"download_url":"([^"]+)"' | cut -d'"' -f4`
chmod a+x ~/.local/bin/pickley

Install from source

Run (you will need tox):

git clone https://github.com/codrsquad/pickley.git
cd pickley
tox -e package
cp .tox/package/pickley ~/.local/bin/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pickley-2.5.1.tar.gz (30.6 kB view details)

Uploaded Source

Built Distribution

pickley-2.5.1-py2.py3-none-any.whl (30.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pickley-2.5.1.tar.gz.

File metadata

  • Download URL: pickley-2.5.1.tar.gz
  • Upload date:
  • Size: 30.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for pickley-2.5.1.tar.gz
Algorithm Hash digest
SHA256 7e7dc505c9baef649ecfbd71bde20b61b9509a3b1e5070dfcdf2cc21cd72d9bb
MD5 ee1bbae4d1fcb728e54259b28cd30e7f
BLAKE2b-256 c09256c0e0ad61f310728605cf3c7f89144ef3a9a88b25e5adda2f7bee64661c

See more details on using hashes here.

File details

Details for the file pickley-2.5.1-py2.py3-none-any.whl.

File metadata

  • Download URL: pickley-2.5.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for pickley-2.5.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 118affa6ff60b1228d39bada1eb78daaa864024ad9dab5c00c7c8500a1e020bd
MD5 6470798504af15a0735fe8975680c8ce
BLAKE2b-256 b748053b3171eedd08d793f04a69c58f4f56ec0c1fcd92f543a03086491c448e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page