I am a python developer and usually work with multiple repositories at any time. Most of these projects have different dependencies so I create a virtual environment in every project. I prefer creating virtual env right next to code. Pycharm also detects it when repository is opened in Pycharm.
This setup worked most of the time but sometimes, I activate venv of one repository and then change it another repository without changing activating correct environment. I usually spotted this when code execution used to fail and never lost more than a minute on this but, this always made me think what if there is a shell that could run something when you enter a directory?
I decided to implement something simple in shell script temporarily. I ended up with creating small function, aliased with cd
and added in my .bashrc.
It's a simple function and all I ever needed. It does,
- Loads the
.venv
from that repository - Additionally, sources
.cdenv
, i usually set env variable but you can do anything in there.
I was okay with not deactivating/resetting environment when i exited the directory.
Add below function in .bashrc
and you should be able to use it.
Note: If you create your virtual environment with different name then please change the name in code below.
function cd() {
# Run a shell `cd` command or error
command cd "$@" || return
# If .venv exists in the directory
if [[ -d .venv ]]; then
# Deactivate any initialized virtual env, ignore error
deactivate > /dev/null 2>&1
# activate .venv
source .venv/bin/activate
echo "deactivate prev venv and activate current venv"
fi
# Load a .cdenv file
if [[ -f .cdenv ]]; then
echo "loading .cdenv"
source ./.cdenv
fi
}
Top comments (2)
PyCharm as your IDE is the bomb. Out of the box, creating a new project will create and enable a virtual environment for you. From there you just 'pip install' using the PyCharm terminal like you would anyway.
Thanks for putting that in detail!
In fact, it can also be combined with Servbay for environment configuration, enabling one-stop installation and version control for Python, which directly improves work efficiency. For more details, please check my main article. Hope it can provide you with a new option!