Skip to main content

Conscript console scripts in your own Swiss Army Knife.

Project description

Conscript: console scripts in your own Swiss Army Knife.

PyPI Version License Supported Pythons CI

Conscript provides a console script you can use to conveniently expose all other console scripts in a virtual environment. In a traditional virtual environment this is of little use. In a zipapp, it gives you capabilities similar to BusyBox.

Use

To create a BusyBox, simply add conscript to your dependencies and set your application main entrypoint to the conscript console script.

Examples

Examples are probably the best way to demonstrate the utility of Conscript. Both Pex and Shiv are popular tools for creating zipapps with third party dependencies; so they lead to concise examples.

Pex

  1. Create the BusyBox PEX zipapp:
    $ pex cowsay fortune conscript --script conscript --output-file speak
    
  2. Examine the available embedded apps:
    $ ./speak -h
    usage: speak [-h] [PROGRAM]
    
    A speak busy box.
    
    positional arguments:
      PROGRAM     The program to execute.
    
                  The following programs are available:
                  + cowsay
                  + fortune
    
    optional arguments:
      -h, --help  Show this help message and exit.
    
  3. Run an embedded app:
    $ ./speak cowsay "Conscript is my Swiss Army Knife!"
      _________________________________
    | Conscript is my Swiss Army Knife! |
      =================================
                                     \
                                      \
                                        ^__^
                                        (oo)\_______
                                        (__)\       )\/\
                                            ||----w |
                                            ||     ||
    
  4. Or another one:
    $ ./speak fortune -h
    Usage: speak [OPTIONS] [fortune_file]
    
    Options:
      -h, --help     show this help message and exit
      -V, --version  Show version and exit.
    
    If fortune_file is omitted, fortune looks at the FORTUNE_FILE environment
    variable for the path.
    $ ./speak fortune /usr/share/fortune/science
    Nondeterminism means never having to say you are wrong.
    
  5. Target an embedded app via a symlink:
    $ ln -s speak cowsay
    $ ./cowsay Nifty.
      ______
    | Nifty. |
      ======
          \
           \
             ^__^
             (oo)\_______
             (__)\       )\/\
                 ||----w |
                 ||     ||
    

Shiv

The capabilities exposed by Conscript are the same as in the Pex example, so this example is abbreviated to the basics. The primary difference is that Shiv does not fully isolate requested dependencies in the zipapp from incidental dependencies and so we see more available console scripts than in the Pex case.

  1. Create the BusyBox shiv zipapp:
    $ shiv cowsay fortune conscript --python '/usr/bin/env python' --console-script conscript --output-file say
    Collecting cowsay
      Using cached cowsay-4.0-py2.py3-none-any.whl (24 kB)
    Collecting fortune
      Using cached fortune-1.1.0-py2.py3-none-any.whl (5.9 kB)
    Collecting conscript
      Using cached conscript-0.1.1-py2.py3-none-any.whl (7.5 kB)
    Collecting grizzled-python>=1.0
      Using cached grizzled_python-2.2.0-py2.py3-none-any.whl (36 kB)
    Installing collected packages: grizzled-python, fortune, cowsay, conscript
    Successfully installed conscript-0.1.1 cowsay-4.0 fortune-1.1.0 grizzled-python-2.2.0
    
  2. Use it:
    $ ./say -h
    usage: say [-h] [PROGRAM]
    
    A say busy box.
    
    positional arguments:
      PROGRAM     The program to execute.
    
                  The following programs are available:
                  + cowsay
                  + easy_install
                  + easy_install-3.8
                  + fortune
                  + pip
                  + pip3
                  + pip3.8
                  + shiv
                  + shiv-info
    
    optional arguments:
      -h, --help  Show this help message and exit.
    $ ./say cowsay --version
    4.0
    

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

conscript-0.1.8.tar.gz (11.8 kB view details)

Uploaded Source

Built Distributions

conscript-0.1.8-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

conscript-0.1.8-py2.py3-none-any.whl (9.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file conscript-0.1.8.tar.gz.

File metadata

  • Download URL: conscript-0.1.8.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for conscript-0.1.8.tar.gz
Algorithm Hash digest
SHA256 68f84bed8169a2a236bfc6740fc4e3823a09c18cd8596ee13123d8b7c4a3c8a6
MD5 14cc950160e825d31a85d262ce87c9d4
BLAKE2b-256 2c44a853b11fca29e1042cc34de091e58b4d849ecedf269e6feb3669931dd115

See more details on using hashes here.

File details

Details for the file conscript-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: conscript-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for conscript-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 6e4dab19b0e62d5167e6da7a66f33607736d52a15613283f5348679611ae5faa
MD5 de353ec308c04fff9cd9a1079b8f0df5
BLAKE2b-256 090656b1862eee551d48187b0d69a88550c20064280a3e5b6ec81e145acf5a86

See more details on using hashes here.

File details

Details for the file conscript-0.1.8-py2.py3-none-any.whl.

File metadata

  • Download URL: conscript-0.1.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for conscript-0.1.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e1a214c431bfb13757f88c4cf70a39b9db48fd8cbb61d9683f683bc9a10799aa
MD5 936dfec6453f87e3018fd032bdbc4d89
BLAKE2b-256 f478e6e2341eb184f85d81c7d2471b3861c4fdee5fb4f3ea760c18522f59b9ad

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