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.
Metadata
Release files for wox 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wox-0.1.0.tar.gz | 136.4 kB | Without provenance | Details for wox-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wox-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for wox-0.1.0-py3-none-any.whl |
Total release size: 169.1 kB
Release files / wox-0.1.0.tar.gz
| Download URL | wox-0.1.0.tar.gz |
|---|---|
| Size | 136.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17b0025be7ba633a05cbbd7b9d5e135247d8435336e9cf550e0e2069fd72c18f
|
|
BLAKE2b-256 checksum How to use checksums |
873871fc1af8b8a87227852caad1b13d0e197af813d5be3b7aed7395ebc56345
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.11.13
|
Release files / wox-0.1.0-py3-none-any.whl
| Download URL | wox-0.1.0-py3-none-any.whl |
|---|---|
| Size | 32.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9ad42898a0219f6901d11a27c5fde940258414294128b92483aca4c9a979dd7a
|
|
BLAKE2b-256 checksum How to use checksums |
3b25570d7d2aa8af50dea0038083fef38a81794fa27a6729ef8335014ea4e79b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.11.13
|
Security for wox 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.