GithubHelp home page GithubHelp logo

pombredanne / pickley Goto Github PK

View Code? Open in Web Editor NEW

This project forked from codrsquad/pickley

0.0 1.0 0.0 322 KB

Automate installation of standalone python CLIs

License: MIT License

Shell 0.26% Python 99.74%

pickley's Introduction

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/

pickley's People

Contributors

zsimic avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.