Skip to main content

A package to create portable virtual environments programmatically.

Project description



pipeline status

venvctl is a tool allowing the creation of portable Python virtual environments.


venvctl helps to build fully portable Python virtual environments, in bulk, or single mode, keeping the state in config files. Each virtual environment comes with a detailed markdown report, allowing you to control the integrity of its state, broken dependencies, errors, and warnings that occurred in the build process. Eventually, the folders ready for distributions get packed in tarballs, as shown in the folders tree example below:

│   ...
│   └── pyvenv.cfg
├── builds
│   ├── ansible_2_9.tar.gz
│   └── base.tar.gz
└── reports


venvctl relies on a few packages to explicate its core functionalities:


piphyperd, a wrapper around pip to manage installations and audits.


markd, a Python package that facilitates the generation of markdown flavored files.

virtualenv==20.0.3  # Virtual Python Environment builder.
click==7.0  # Composable command line interface toolkit.
binaryornot==0.4.4  # Ultra-lightweight pure Python package to check if a file is binary or text.


venvctl is currently distributed only through

pip install --user venvctl

Visit the project page for further information about the package status and releases.


For the detailed instructions and a full API walkthroug, refer to the Official Documenation.

You can leverage venvctl both programmatically, or calling the CLI, as shown in the example below:

venvctl generate \
    --config ~/path/to/your/config/venvs.json \
    --out ./venvs

A config file follows the json structure:

        "name": "base",
        "packages": [
        "name": "ansible_2_9",
        "parent": "base",
        "packages": [
        "name": "ansible_2_9_tox",
        "parent": "ansible_2_9",
        "packages": [

The build process follows an inheritance pattern, in the example above, the environment named base is the core for the rest; ansible_2_9 inherits its packages; ansible_2_9_tox adds modules on the top of its parent, ansible_2_9.

With this logic, the build process in bulk can be quite fast, even when deploying complex virtual environments.


GNU General Public License v3 (GPLv3)

About the author

Francesco Cosentino

I'm a surfer, a crypto trader, and a DevSecOps Engineer with 15 years of experience designing highly-available distributed production environments and developing cloud-native apps in public and private clouds.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for venvctl, version 1.0.0
Filename, size File type Python version Upload date Hashes
Filename, size venvctl-1.0.0.tar.gz (43.5 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page