A declarative CLI that runs reproducible tasks inside isolated Python environments
Project description
wox
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b0025be7ba633a05cbbd7b9d5e135247d8435336e9cf550e0e2069fd72c18f
|
|
| MD5 |
42abb4344947139b52439ccf48be764f
|
|
| BLAKE2b-256 |
873871fc1af8b8a87227852caad1b13d0e197af813d5be3b7aed7395ebc56345
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ad42898a0219f6901d11a27c5fde940258414294128b92483aca4c9a979dd7a
|
|
| MD5 |
adeff1c6ea19571794b2e02fe5c29efb
|
|
| BLAKE2b-256 |
3b25570d7d2aa8af50dea0038083fef38a81794fa27a6729ef8335014ea4e79b
|