venvy 🐍
Auto-tracks
pip installandpip uninstallinrequirements.txt— likepackage.jsonfor Python.
Once set up, you just use pip normally. venvy silently keeps your requirements.txt in sync automatically.
How it works
venvy injects a small hook (venvy_hook.py) into your venv's site-packages. This hook patches pip's internal InstallCommand.run and UninstallCommand.run — so every successful pip install or pip uninstall automatically updates requirements.txt. No wrappers, no aliases, no shell setup.
Installation
pip install venvy # global install recommended
# or
pipx install venvy
Quick start
1. Create a venv (hook included automatically)
cd my-project
venvy create venv
Asks two questions:
[1/2] Install ipykernel? [y/N]: n
[2/2] Requirements file name [requirements.txt]:
Then: creates .venv/, upgrades pip, injects the tracking hook.
2. Activate your venv normally
# Windows CMD
.venv\Scripts\activate.bat
# Windows PowerShell
.venv\Scripts\Activate.ps1
# macOS / Linux
source .venv/bin/activate
3. Just use pip — requirements.txt updates automatically
pip install flask
# Output:
# Successfully installed flask-3.1.3 ...
# [venvy] + flask==3.1.3 → requirements.txt ← automatic!
pip install requests httpx
# [venvy] + requests==2.31.0 → requirements.txt
# [venvy] + httpx==0.27.0 → requirements.txt
pip uninstall flask -y
# Successfully uninstalled flask-3.1.3
# [venvy] - flask → requirements.txt ← automatic!
No extra commands. No wrappers. Just pip.
Using an existing venv
If you already have a venv (not created by venvy):
source .venv/bin/activate # activate it first (or don't — venvy finds it)
venvy install-hook # inject the tracking hook
Or specify the path:
venvy install-hook .venv
venvy install-hook my_env
All commands
venvy create venv Create venv + inject pip hook
--name -n Venv directory name (default: .venv)
--requirements -r Requirements file name (prompted)
--ipykernel Install ipykernel for Jupyter
--yes -y Skip all prompts
venvy install-hook [path] Inject hook into existing venv
venvy pip install <pkg> Install + update requirements (manual fallback)
--upgrade -U
venvy pip uninstall <pkg> Uninstall + update requirements (manual fallback)
--yes -y
venvy status Show venv info + hook status + requirements
venvy list List packages in requirements.txt
venvy sync Install all packages from requirements.txt
venvy --version
Project structure
my-project/
├── .venv/
│ └── lib/pythonX.Y/site-packages/
│ ├── venvy_hook.py ← the hook (auto-injected)
│ └── venvy_hook.pth ← loads hook on every Python start
├── .venvy/
│ └── config.json ← venvy project config
├── requirements.txt ← auto-managed ✓
└── your_code.py
.venvy/config.json:
{
"venv_name": ".venv",
"requirements_file": "requirements.txt",
"install_ipykernel": false
}
Restoring a project
git clone https://github.com/user/project
cd project
venvy create venv # installs from existing requirements.txt automatically
# OR
python -m venv .venv
source .venv/bin/activate
venvy install-hook
venvy sync
Comparison with npm
| npm | venvy |
|---|---|
npm init |
venvy create venv |
npm install pkg |
pip install pkg (auto-tracked after venvy setup) |
npm uninstall pkg |
pip uninstall pkg (auto-tracked) |
npm install |
venvy sync |
package.json |
requirements.txt |
node_modules/ |
.venv/ |
License
MIT
Metadata
Release files for vvenv 0.1.2
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 | |
|---|---|---|---|---|
| vvenv-0.1.2.tar.gz | 28.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vvenv-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 66.0 kB
Release files / vvenv-0.1.2.tar.gz
| Download URL | vvenv-0.1.2.tar.gz |
|---|---|
| Size | 28.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4bd45f1d9b002bf7cd1691cf9a7b3919254921f91848d734ed39f75aafdfb06b
|
|
BLAKE2b-256 checksum How to use checksums |
1268bc44a40933b24cfbac80165348c1283656a791243ab09433b348144092cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.6
|
Release files / vvenv-0.1.2-py3-none-any.whl
| Download URL | vvenv-0.1.2-py3-none-any.whl |
|---|---|
| Size | 37.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2ef581703754ce4300a1e97a2defa38104c594eeddea2df8087061a2765e8182
|
|
BLAKE2b-256 checksum How to use checksums |
36c320640f7ec4794e4376fb4a780053653a3f487cb4d34c9e005a4745352d37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.6
|
Security for vvenv 0.1.2
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.