I have been using Python for a while now, and managing dependencies and versions always has been a pain. macOS still comes with Python2.7, but most dev works have moved to Python3.
This time around, I saw myself using Python more and more and decided to stop kicking the can down the road and “properly” set up Python (at least for my use cases). This is a quick setup summary on how I set up and manage my Python versions and environments using
pyenv-virtualenv. These tools are also compatible with various Linux distributions such as Debian, Ubuntu, Mint.
1. Install Dependencies
brew install openssl readline sqlite3 xz zlib brew install pyenv brew install pyenv-virtualenv
2. Update your shell file (.zshrc or .bash_profile)
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\n eval $(pyenv virtualenv-init -)"\n fi' >> ~/.zshrc echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.zshrc
These should add the following lines to your shell file (use
cat ~/.zshrc for a quick check)
# ... if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" fi export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" export PATH="$PYENV_ROOT/shims:$PATH" # ...
3. Install and configure Python version using Pyenv
# List available versions pyenv versions # Install desired version pyenv install 3.9.1 # Set Global Python version pyenv global 3.9.1
4. Create and configure a virtual environment
# Change directory to the desired location where you will work from your virtual environment # Create a virtualenv pyenv virtualenv 3.9.1 my_sandbox # Set the Python version to the virtualenv you created pyenv local my_sandbox
5. Happy Coding!
Now you should have an active virtual environment to install dependencies isolated from the global Python installation. If you move in/out of a configured directory, the virtual environment should activate/deactivate automatically. If not, you can run
Here are a few references for more details on hoy pyenv and pyenv-virtualenv work.