Skip to main content

A declarative CLI that runs reproducible tasks inside isolated Python environments

Project description

wox

pipeline status coverage report

Wox is a lightweight Python task automation tool designed to simplify development workflows. It allows you to run tasks in isolated Python environments, manage dependencies, and execute commands exactly as you would in your terminal.

With wox, you can:

  • Run tests across multiple Python versions effortlessly.
  • Automate common tasks like linting, formatting, or documentation generation.
  • Execute any shell command or entry point from Python or other languages (Java, C, JavaScript, …) in a controlled environment.
  • Keep your workspace clean with .wox, where virtual environments and logs are automatically managed.

Wox gives you full transparency and control over your automation: no hidden behaviors, no surprises. You declare your tasks in a wox.toml or pyproject.toml file, and wox handles the rest.

Example

As an example, here is how wox ensures its own compatibility across Python versions:

[wox_configuration]
recreate_envs = false

[testing]
envlist = ['py310', 'py311', 'py312', 'py313', 'py314']
deps = ['-r requirements.txt', '-e .']
commands = ['python -B -m pytest']

Check more examples on the Quickstart section of the documentation.

Quickstart

Install with pip:

pip install wox

Or use pipx to run wox without Python virtual environments:

pipx install wox

If you’re a uv enthusiast, you can run it directly thanks to uvx, the alias for uv tool run:

uvx wox

Then, create a task in your wox.toml and run it with:

wox

Documentation

Check the documentation for detailed guides and examples.

Why wox?

At some point, I needed to validate a framework against Python 3.6. While the code itself was still compatible, the tooling ecosystem had already started to move on. In particular, virtualenv had dropped support for creating environments targeting Python versions older than 3.7.

This raised a broader concern: if tooling stops supporting older interpreters today, what guarantees do we have that it will not move further tomorrow?

In many critical environments, Python versions do not evolve at the same pace as the ecosystem. Long-term support constraints, certification processes, or operational risks often require running stable - and sometimes old - Python interpreters for years.

Rather than working around this limitation, wox emerged from a simple requirement: executing tasks against explicitly selected Python interpreters, in a fully isolated and reproducible way, without relying on assumptions made by the surrounding tooling.

As development progressed, something became apparent: wox was sufficiently abstract and robust to support use cases far beyond my original problem.

Testing across Python versions, comparing custom builds, benchmarking interpreters, onboarding new developers, running non-Python tooling — none of these required special handling. They naturally fell out of the same execution model.

Wox did not grow by accumulating features, but by revealing the consequences of its design. New use cases emerged not because they were planned, but because the underlying abstraction held.

Contribution

Have an idea to improve wox and don't know how to give it a go? Check the CONTRIBUTION.md and propose your feature with a merge request.

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

wox-0.1.0.tar.gz (136.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wox-0.1.0-py3-none-any.whl (32.7 kB view details)

Uploaded Python 3

File details

Details for the file wox-0.1.0.tar.gz.

File metadata

  • Download URL: wox-0.1.0.tar.gz
  • Upload date:
  • Size: 136.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for wox-0.1.0.tar.gz
Algorithm Hash digest
SHA256 17b0025be7ba633a05cbbd7b9d5e135247d8435336e9cf550e0e2069fd72c18f
MD5 42abb4344947139b52439ccf48be764f
BLAKE2b-256 873871fc1af8b8a87227852caad1b13d0e197af813d5be3b7aed7395ebc56345

See more details on using hashes here.

File details

Details for the file wox-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: wox-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 32.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for wox-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9ad42898a0219f6901d11a27c5fde940258414294128b92483aca4c9a979dd7a
MD5 adeff1c6ea19571794b2e02fe5c29efb
BLAKE2b-256 3b25570d7d2aa8af50dea0038083fef38a81794fa27a6729ef8335014ea4e79b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page