Conscript: console scripts in your own Swiss Army Knife.
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
- Create the BusyBox PEX zipapp:
$ pex cowsay fortune conscript --script conscript --output-file speak
- 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.
- Run an embedded app:
$ ./speak cowsay "Conscript is my Swiss Army Knife!" _________________________________ | Conscript is my Swiss Army Knife! | ================================= \ \ ^__^ (oo)\_______ (__)\ )\/\ ||----w | || ||
- 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.
- 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.
- 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
- 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
Metadata
Release files for conscript 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| conscript-0.1.9.tar.gz | 11.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| conscript-0.1.9-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 21.0 kB
Release files / conscript-0.1.9.tar.gz
| Download URL | conscript-0.1.9.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
43f3682840fc2f4cad379dc08da7d9d97859a2bd8ad70b3bb565061c9ac6efca
|
|
BLAKE2b-256 checksum How to use checksums |
6652f4230cd3e47d54691b04589ac959a0033867a7782b46e83dff73b123fd11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2025.
Transparency logRelease files / conscript-0.1.9-py2.py3-none-any.whl
| Download URL | conscript-0.1.9-py2.py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
0faa50b9bfe3eea80d8112642516023da5f1e5c9aaf1e3247ea09a3420c05cf5
|
|
BLAKE2b-256 checksum How to use checksums |
a7712747dcdf83869ddf3010869dde76445a7558483a5b90e5ca4805ff4c3da7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2025.
Transparency log