Skip to main content
Donate to the Python Software Foundation or Purchase a PyCharm License to Benefit the PSF! Donate Now

Automate installation of standalone python CLIs

Project description

Automate installation of standalone python CLIs

Version on pypi Travis CI 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 can work out of the box, without any configuration:

  • pickley will install in the same folder it’s running from (drop it in /usr/local/bin or ~/.local/bin for example)
  • All pypi packages with console_scripts entry point(s) can be immediately installed
  • Latest non-prerelease pypi version will be used, no automatic updates (you can run pickley install ... any time to upgrade)

With some configuration, the following becomes possible:

  • You can create “channels” such as “stable” and choose which version you want installed
  • You can use the wrap delivery method, which will make all your installed CLIs auto-upgrade themselves
  • You can have the installed packages produced as pex or venv

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

$ which pickley
/usr/local/bin/pickley

$ pickley install tox twine
Installed tox 3.2.1
Installed twine 1.11

$ which tox
/usr/local/bin/tox

$ tox --version
tox version 3.2.1

$ pickley list
base: /usr/local/bin
tox 3.2.1
twine 1.11

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 by default 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 withing 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 /usr/local/bin and all the stuff you install with it will also be there
    • latest non pre-release version from pypi is used
  • Packaging is done via pex by default, but virtualenv or shiv can be used to (more possible in the future)

  • 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

bash one-line install

Run:

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

Install from source

Run (you will need tox):

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

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
pickley-1.9.3-py2.py3-none-any.whl (31.0 kB) Copy SHA256 hash SHA256 Wheel py2.py3
pickley-1.9.3.tar.gz (26.9 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page