Why setV?
Published on Jan 19, 2020 by Sachin.
I got a comment on my post that what are the benefits of setv
compared to
pyenv or auto-pyenv? Let me answer this in this post. Well, as you may have
studied the script, setv
is actually a wrapper around Python’s venv
module
and virtualenv
(in case of Python2). It uses venv
or virtualenv
depending
upon the Python version to create the Python virtual environment. At the time of
developing this script/project, my goal was not only to create the Python
virtual environment but how to manage existing Python virtual environments more
efficiently. I’ll share some benefits of setv
below:
Where is my virtual environment?
I often see this question asked by newbies in Python or Python virtual environment. They all love the idea of isolating the packages per project but they often forget to activate the virtual environment the very next time. Mostly they don’t remember where the virtual environment is saved. This creates confusion. The preferred way is to save the environment within the project itself so that you don’t have to spend time searching for the right environment. This is great but it ends up creating directories like
bin/
,include/
,lib/
, andshare/
. I’m not saying this is bad. Of course with experience, these directories will not have such concerns, but this can be more confusing for the first-timer. I’ve seen many guys unknowingly adding these directories to thegit
repositories.Before
setv
, I used to keep all my virtual environments separately in~/virtualenv
isolated from all the Python projects and then simply type:source ~/virtualenvs/<VIRTUALENV_NAME>/bin/activate
to activate the specific virtual environment. This was great. Even now
setv
keeps all the virtual environments in~/virtualenvs/
. This is purely historical. One can always change the directory name and path. But what I personally love aboutsetv
is I don’t have to remember the path of any virtual environment.setv
will list all the virtual environment names using TAB completion. No matter in which directory I’m currently in my system, I can always usesetv
to activate the desired virtual environment. See the screen-cast for the demo. This saves a lot of time.Switching between the virtual environments.
This brings us to another advantage of using
setv
. We often want to switch between Python projects. Naturally, we also have to switch the virtual environment.setv
makes this really simple as all the virtual environments are always available tosetv
. Try TAB completing the environment name by initially typing a few letters(or just one letter) of your virtual environment.Sharing a common virtual environment between projects.
We often want to use a common virtual environment between projects especially when the “core” and “plugins” are two separate projects. It will be tedious to save the virtual environment in “core” or the “plugins” and then use
source <VIRTUALENV_NAME>/bin/activate
to activate the project. Generally “plugins” will always have more modules on top of the “core”, so it makes perfect sense to use a common environment for working on both projects.
Re-using the virtual environment.
I personally use this a lot. I often create a temporary virtual environment to try out a new project hosted on GitHub/GitLab and find it useful to re-use to the environment by installing more modules for a new project. This saves time and avoids data being downloaded twice.
What about the stale virtual environments?
We will eventually end up having all the virtual environments in
~/virtualenvs
. With time, few will be unused. This will consume unnecessary disk space.setv
has a--delete
flag to clean up the old virtual environments and make space for a new one.