Skip to main content

venvy 🐍

Auto-tracks pip install and pip uninstall in requirements.txt — like package.json for 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)

Source distribution for vvenv 0.1.2
File Size Uploaded Provenance
vvenv-0.1.2.tar.gz 28.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for vvenv 0.1.2
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page