Ora

How to switch Python environment in terminal?

Published in Python Environments 4 mins read

To switch your Python environment in the terminal, you typically activate a specific virtual environment using commands provided by tools like venv, Conda, pipenv, or Poetry. This modifies your terminal session's PATH variable to prioritize the Python interpreter and packages within that environment.

Understanding Python Environments

Python environments are isolated directories that contain a specific Python interpreter and a set of installed packages. They prevent dependency conflicts between different projects by allowing each project to have its own dependencies without affecting others. Switching environments means changing which Python interpreter and set of packages your terminal session is currently using.

Switching with venv (Virtual Environments)

venv is a built-in Python module for creating lightweight virtual environments. It's the most common way to manage project-specific dependencies.

Creating a venv

First, navigate to your project directory. If you haven't already, create a new virtual environment:

python3 -m venv .venv

This command creates a directory named .venv (a common convention) inside your project, containing the environment.

Activating a venv

Activation commands differ slightly based on your operating system:

Operating System Command
macOS / Linux source .venv/bin/activate
Windows (CMD) .\.venv\Scripts\activate
Windows (PowerShell) .\.venv\Scripts\Activate.ps1

After activation, your terminal prompt usually changes to indicate the active environment (e.g., (.venv) user@host:~/my_project$). You can then install packages using pip, and they will only be available within this environment.

Deactivating a venv

To exit the virtual environment and return to your system's default Python, use:

deactivate

Switching with Conda Environments

Conda is an open-source package and environment management system. It's especially popular in data science for managing environments that can contain not just Python but also other language runtimes and native libraries.

Creating a Conda Environment

To create a new Conda environment named myenv with a specific Python version:

conda create --name myenv python=3.9

Activating a Conda Environment

To switch to a Conda environment:

conda activate myenv

Your terminal prompt will change to (myenv) user@host:~/my_project$.

Deactivating a Conda Environment

To return to the base Conda environment or your system's default:

conda deactivate

Listing Conda Environments

To see all your Conda environments, run:

conda env list

Switching with pipenv

pipenv is a tool that aims to bring the best of all packaging worlds to Python. It automatically creates and manages a virtual environment for your projects.

Creating/Entering a pipenv Shell

When in your project directory, simply run:

pipenv shell

This command will automatically create a virtual environment for your project (if one doesn't exist), install dependencies from Pipfile.lock, and activate a subshell within that environment. Your prompt will indicate the active pipenv environment.

Exiting a pipenv Shell

To exit the pipenv shell, simply type:

exit

Switching with Poetry

Poetry is a dependency management and packaging tool for Python. It creates and manages virtual environments for your projects, similar to pipenv.

Activating a Poetry Shell

In your project directory, use:

poetry shell

This command activates a shell within the project's virtual environment. If the environment doesn't exist, Poetry will create it automatically. The prompt will usually change to reflect the active Poetry environment.

Exiting a Poetry Shell

To exit the Poetry shell, type:

exit

Beyond Terminal: Selecting Interpreters in IDEs

While direct environment activation primarily occurs in the terminal, Integrated Development Environments (IDEs) like VS Code or PyCharm often provide their own streamlined interfaces to select the desired Python interpreter for your project. This allows you to visually choose from available environments, ensuring your IDE uses the correct Python version and installed packages without always manually running activation commands in its integrated terminal. These IDE features typically hook into the environments you've created using the terminal-based methods described above.

Best Practices for Environment Management

  • Always use environments: Make it a habit to create a new environment for every Python project.
  • Name environments clearly: Use descriptive names for Conda environments (e.g., myproject-dev, data-analysis-py38).
  • Check your active environment: Use which python or python --version to confirm that the correct Python interpreter is active.
  • Generate requirements.txt: Use pip freeze > requirements.txt (for venv users) or similar commands for other tools to document your project's dependencies.

By consistently using these methods, you can effectively manage and switch between Python environments, ensuring clean and conflict-free development workflows.