viv isn't venv
Go to file
Daylin Morgan 470052c736
fix: run vendored test on package
2024-01-03 12:14:37 -06:00
.github ci: add flow to release workflow 2023-10-07 16:46:40 -05:00
assets docs: update main help screenshot 2023-10-02 12:37:06 -05:00
docs fix: typo on run example 2023-12-18 12:28:18 -06:00
examples feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
scripts fix: use most recent tomli 2024-01-03 12:09:52 -06:00
src/viv fix: use most recent tomli 2024-01-03 12:09:52 -06:00
tests fix: run vendored test on package 2024-01-03 12:14:37 -06:00
.gitignore feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
.pre-commit-config.yaml feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
LICENSE chore: add LICENSE 2022-12-26 08:03:58 -06:00
README.md fix: typo on run example 2023-12-18 12:28:18 -06:00
mkdocs.yml docs: add badges 2023-08-21 15:16:18 -05:00
noxfile.py feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
pdm.lock feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
pyproject.toml feat: vendor packaging + add support for requires python check 2024-01-03 12:01:28 -06:00
task chore: ensure directories for dev-install 2024-01-02 12:26:10 -06:00
todo.md chore: update todos 2023-08-09 11:27:54 -05:00

README.md

Stargazers Issues MIT License PYPI Ruff Black pre-commit Conda

Logo

viv isn't venv

cli screenshot

Documentation

Try before you buy!

python3 <(curl -fsSL viv.dayl.in/viv.py) run pycowsay -- "viv isn't venv\!"

Viv is a standalone dependency-free venv creator 1. Viv helps you ignore silly things like managing temporary or rarely used virtual environments, while still unleashing the full power of Python scripting with its entire ecosystem at your disposal.

Viv's uncompromising insistence on portability means that it will always:

  1. only use the standard library
  2. never exceed a single script.

For that reason, any usage of the CLI can be accomplished using a remote copy as seen in the below install command.

Setup

Run the below command to install viv.

python3 <(curl -fsSL viv.dayl.in/viv.py) manage install

To access viv from within scripts you should add its location to your PYTHONPATH. By default viv will be installed to $XDG_DATA_HOME/viv or ~/.local/share/viv; you can customize this with --src.

export PYTHONPATH="$PYTHONPATH:$HOME/.local/share/viv"
pip install viv

Why is this not recommended? Mainly because viv is all about hacking your sys.path. Placing it in its own virtual environment or installing in a user site directory may complicate this endeavor.

Usage

In any Python script with external dependencies you can add this line to automate vivenv creation and installation of dependencies.

__import__("viv").use("click")

To remove all vivenvs you can use the below command:

viv env remove $(viv list -q)

To remove viv altogether you can use the included purge command:

python3 <(curl -fsSL viv.dayl.in/viv.py) manage purge

Equivalent commands from alternatives

pip-run

pip-run cowsay -- -m cowsay "moove over, pip-run"
python3 <(curl -fsSL viv.dayl.in/viv.py) run cowsay -- "moove over, pip-run"
python -m pip-run requests -- -c "import requests; print(requests.get('https://pypi.org/project/pip-run').status_code)"
python -m viv run requests -b python -- -c "import requests; print(requests.get('https://pypi.org/project/viv').status_code)"

pipx

pipx install pycowsay
viv shim pycowsay
pipx run https://gist.githubusercontent.com/cs01/fa721a17a326e551ede048c5088f9e0f/raw/6bdfbb6e9c1132b1c38fdd2f195d4a24c540c324/pipx-demo.py
python3 <(curl -fsSL viv.dayl.in/viv.py) run \
  -s https://gist.githubusercontent.com/cs01/fa721a17a326e551ede048c5088f9e0f/raw/6bdfbb6e9c1132b1c38fdd2f195d4a24c540c324/pipx-demo.py

Bonus: use viv with just standalone snippet (37LOC)

--standalone will auto-generate a mini-function version of viv to accomplish the same basic task as using a local copy of viv. After generating this standalone shim you can freely use this script across Unix machines which have Python > 3.8. See examples/black for output of the below command.

viv freeze also supports --standalone.

python3 <(curl -fsSL viv.dayl.in/viv.py) shim black -o ./black --standalone --freeze

  1. You do need to have pip but surely you have pip already. ↩︎