Wiki source code of VirtualEnv
Version 8.1 by David De La Harpe Golden on 2026/05/17 16:17
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | While historically I use python virtualenv helpers like | ||
| 2 | |||
| 3 | * [[vex>>https://pypi.org/project/vex/]] | ||
| 4 | * [[virtualenvwrapper>>https://pypi.org/project/virtualenvwrapper/]] | ||
| 5 | * [[virtualenvwrapper-win>>https://pypi.org/project/virtualenvwrapper-win/]] | ||
| 6 | |||
| 7 | ...since virtualenv is now in the python stdlib, I have lately pared it down to two little helpers | ||
| 8 | |||
| 9 | * ##mkve## - makes a new basic virtualenv. | ||
| 10 | * ##ve## - launches a subshell with the virtualenv active - in contrast to the weird way official activate does within the current shell i.e like ##vex## but less fancy. | ||
| 11 | |||
| 12 | {{code language="bash"}} | ||
| 13 | $ mkve BlahVenv | ||
| 14 | $ ve BlahVenv | ||
| 15 | $ pip install av | ||
| 16 | $ exit | ||
| 17 | {{/code}} | ||
| 18 | |||
| 19 | |||
| 20 | == mkve == | ||
| 21 | |||
| 22 | {{code language="bash"}} | ||
| 23 | #!/bin/bash | ||
| 24 | # make a new python venv: | ||
| 25 | # mkve SomeVenv | ||
| 26 | |||
| 27 | if [ -e "$1" ] ; then | ||
| 28 | echo >&2 "Already exists. Use python -m venv ... directly for complex args." | ||
| 29 | else | ||
| 30 | exec python -m venv "$1" | ||
| 31 | fi | ||
| 32 | |||
| 33 | {{/code}} | ||
| 34 | |||
| 35 | |||
| 36 | == ve == | ||
| 37 | |||
| 38 | {{code language="bash"}} | ||
| 39 | |||
| 40 | #!/bin/bash | ||
| 41 | # use an existing python venv in a subshell, exit to exit: | ||
| 42 | # ve SomeVenv | ||
| 43 | |||
| 44 | if [ -f "$1/bin/activate" ]; then | ||
| 45 | exec bash --rcfile <(cat ~/.bashrc $1/bin/activate) | ||
| 46 | else | ||
| 47 | echo >&2 "Missing Python Virtual Env (should have venv/bin/activate script)" | ||
| 48 | fi | ||
| 49 | |||
| 50 | {{/code}} | ||
| 51 | |||
| 52 | |||
| 53 | == Shell Prompt == | ||
| 54 | |||
| 55 | I have a fancy non-default prompt in my ##~/.bashrc## that shows a little snake if in a python vm | ||
| 56 | |||
| 57 | {{code language="bash"}} | ||
| 58 | # venvs themselves prefix these days, new ones created by stdlib honor this disable, allowing us to customize | ||
| 59 | export VIRTUAL_ENV_DISABLE_PROMPT=1 | ||
| 60 | PS1='${debian_chroot:+\[\033[01;33m\]🌲($debian_chroot)\[\033[00m\]}${VIRTUAL_ENV:+\[\033[01;36m\]🐍($(basename $VIRTUAL_ENV))\[\033[00m\]}\[\033[38;5;108m\]\u@\h\[\033[38;5;128m\]:\[\033[38;5;139m\]\w\[\033[38;5;129m\]\$\[\033[00m\] ' | ||
| 61 | {{/code}} |