pombredanne / pickley

Automate installation of standalone python CLIs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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/

About

Automate installation of standalone python CLIs

License:MIT License


Languages

Language:Python 99.7%Language:Shell 0.3%