Skip to main content

cish - Write shell-like python scripts to control continuous builds

I used to write small bash scripts that created the virtualenv and executed the python setup.py and nosetests commands using one of several Python versions I keep installed on my build machines. But bash scripts aren’t supported on Windows, so I want to write this script in Python instead.

cish is a set of utility functions to write bash-like python scripts that deal with several installed python interpreters.

Let’s get going!

import cish
cish.rm("build")
cish.default.pip("install", "nose")
cish.default.python("setup.py", "build")
cish.default.nosetests()

This will delete the build directory if it exists with all content, install nose, and build and test the package.

default is an ‘environment’ which consists of a python interpreter, library path, and utilities such as pip. default is the environent of the interpreter executing the script itself.

We can also use a different interpreter:

import cish
env = cish.from_interpreter("path/to/python")
env.python("setup.py", "build")
env.nosetests()

The installation location of the python interpreters is often dependent on the test machine. We can place a simple JSON file in one of several locations, for example in /etc/cish.json, to specifiy their location:

{
    "2.6.9": "/opt/python2.6.9/bin/python",
    "2.7.8": "/opt/python2.7.8/bin/python"
}

We can then choose the interpeter in our script using, say, an environment variable set by jenkins:

import cish, os
env = cish.from_config()[os.environ["PYTHON_VERSION"]]
env.python("setup.py", "build")

virtualenv is very easy too:

import cish
venv = cish.default.virtualenv("optional/location")
venv.pip("install", "package_to_install_inside_virtualenv")

Bug Reports and other contributions

This project is hosted here cish github page.

Alternatives

You might want to look at sh a cool library to run executables without dealing with subprocess directly. It has a far wider scope than cish but lacks the abstraction we offer for different python installations and OS specific file extensions and installation locations.

Metadata

Release files for cish 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cish 0.2.1
File Size Uploaded Provenance Actions
cish-0.2.1.zip 15.3 kB Without provenance Details for cish-0.2.1.zip

Release files / cish-0.2.1.zip

Download URL cish-0.2.1.zip
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9196c0cca5aed869f21bbe324fca244e79f77dfa43868fb9506c6ffe3880a172
BLAKE2b-256 checksum
How to use checksums
d922c66531b2afba5bc97cb2c68021f9403290a040d86a8f5a2c8e4bfc19313b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for cish 0.2.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page