Ubuntu Virtual Environments
Introduction
When developing Python applications on Ubuntu, you'll often need to work with different packages and dependencies. Sometimes, projects require specific versions of libraries that might conflict with other projects. This is where virtual environments come to the rescue.
A virtual environment is an isolated Python environment that allows you to install packages specifically for a particular project without affecting your system-wide Python installation. In this tutorial, we'll explore how to create, activate, and manage virtual environments in Ubuntu.
Why Use Virtual Environments?
Before diving into the technicalities, let's understand why virtual environments are essential:
- Dependency Isolation: Each project can have its own dependencies, regardless of what dependencies other projects have.
- Version Control: You can have different versions of the same package for different projects.
- Clean Development: Your global Python environment remains clean and uncluttered.
- Project Portability: Easier to share projects with their exact environment specifications.
Built-in venv
Module
Python 3.3+ comes with the venv
module, which is the recommended way to create virtual environments. Let's start by creating a simple virtual environment.
Installing Required Packages
First, ensure that Python is installed on your Ubuntu system:
python3 --version
If Python is not installed, you can install it using:
sudo apt update
sudo apt install python3
For virtual environments, you'll need the venv
module. It usually comes with Python, but if not, you can install it:
sudo apt install python3-venv
Creating a Virtual Environment
To create a virtual environment, navigate to your project directory and run:
python3 -m venv my_env
This creates a directory named my_env
which contains all the necessary files for your virtual environment, including:
- A copy of the Python interpreter
- The
pip
package manager - Standard library files
Activating a Virtual Environment
Before using your virtual environment, you need to activate it:
source my_env/bin/activate
When activated, your shell prompt will change to show the name of the virtual environment:
(my_env) username@hostname:~/project$
Now, any Python packages you install using pip
will be installed only in this virtual environment.
Installing Packages
With your virtual environment activated, you can install packages using pip
:
pip install numpy
This installs the NumPy package only in your virtual environment, not globally.
Checking Installed Packages
To see what packages are installed in your virtual environment:
pip list
Example output:
Package Version
---------- -------
numpy 1.24.3
pip 23.1.2
setuptools 67.7.2
Deactivating a Virtual Environment
When you're done working with a virtual environment, you can deactivate it:
deactivate
Your shell prompt will return to normal, indicating that you're back to using the system Python environment.
Managing Dependencies with requirements.txt
For project portability, it's good practice to track your dependencies. You can create a requirements.txt
file that lists all packages needed for your project.
Creating a Requirements File
To generate a requirements file from your current environment:
pip freeze > requirements.txt
This command creates a text file listing all installed packages and their versions.
Example requirements.txt
:
numpy==1.24.3
pandas==2.0.1
matplotlib==3.7.1
Installing from a Requirements File
To recreate an environment using a requirements file:
pip install -r requirements.txt
This installs all packages listed in the file with the specified versions.
Working with virtualenvwrapper
While venv
is built into Python, virtualenvwrapper
is a popular tool that makes working with virtual environments even easier.
Installing virtualenvwrapper
pip install virtualenvwrapper
Add the following lines to your shell startup file (.bashrc
, .zshrc
, etc.):
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
After editing, reload your shell configuration:
source ~/.bashrc # or ~/.zshrc
Creating Environments with virtualenvwrapper
mkvirtualenv my_project
This creates and activates a virtual environment named my_project
.
Working with Environments
-
To list available environments:
bashworkon
-
To activate an environment:
bashworkon my_project
-
To deactivate:
bashdeactivate
-
To delete an environment:
bashrmvirtualenv my_project
Practical Example: Web Development Project
Let's walk through a complete example of setting up a virtual environment for a Flask web application.
Step 1: Create and Activate a Virtual Environment
# Create a project directory
mkdir flask_app
cd flask_app
# Create a virtual environment
python3 -m venv flask_env
# Activate the environment
source flask_env/bin/activate
Step 2: Install Required Packages
pip install flask
Step 3: Create a Simple Flask Application
Create a file named app.py
:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Flask in a virtual environment!"
if __name__ == '__main__':
app.run(debug=True)
Step 4: Run the Application
python app.py
Output:
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Step 5: Save Dependencies
pip freeze > requirements.txt
Now your project can be easily shared, and others can recreate the exact same environment.
Virtual Environments with Poetry
Poetry is a modern dependency management tool for Python that simplifies virtual environment management and package dependencies.
Installing Poetry
curl -sSL https://install.python-poetry.org | python3 -
Add Poetry to your PATH by adding the following line to your .bashrc
or .zshrc
:
export PATH="$HOME/.local/bin:$PATH"
Creating a New Project
poetry new my_poetry_project
cd my_poetry_project
This creates a new project with the following structure:
my_poetry_project/
├── pyproject.toml
├── README.md
├── my_poetry_project/
│ └── __init__.py
└── tests/
└── __init__.py
Managing Dependencies
To add a dependency:
poetry add numpy
To install all dependencies:
poetry install
Using the Virtual Environment
Poetry automatically creates and manages a virtual environment for your project. To activate it:
poetry shell
To run a command in the virtual environment without activating it:
poetry run python my_script.py
Working with Conda
Conda is another popular package and environment management system, particularly useful for data science projects.
Installing Miniconda
Download and install Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
Follow the prompts to complete the installation.
Creating a Conda Environment
conda create --name data_science python=3.9
Activating a Conda Environment
conda activate data_science
Installing Packages
conda install pandas scikit-learn matplotlib
Exporting and Importing Environments
Export environment:
conda env export > environment.yml
Create environment from file:
conda env create -f environment.yml
Comparing Virtual Environment Tools
Here's a quick comparison of the different virtual environment tools:
Summary
Virtual environments are an essential tool for Python development in Ubuntu. They provide isolation, dependency management, and project portability. In this tutorial, we've covered:
- Creating and activating virtual environments with
venv
- Managing dependencies with
requirements.txt
- Using
virtualenvwrapper
for enhanced management - Working with Poetry for modern dependency management
- Using Conda for data science projects
By incorporating virtual environments into your workflow, you'll have a more organized, consistent, and reproducible development experience.
Additional Resources and Exercises
Resources
Exercises
-
Basic Environment Management
- Create a virtual environment for a new Python project
- Install three packages of your choice
- Generate a requirements.txt file
- Deactivate and delete the environment
-
Project Migration
- Create a simple Python script that uses a third-party package
- Set up a virtual environment and install the necessary package
- Export your environment
- Delete and recreate the environment from your export file
- Verify that your script still runs correctly
-
Multiple Environment Management
- Create three different virtual environments with different Python versions (if available)
- Practice switching between them
- Install different packages in each
- Create a script that lists all your environments and their installed packages
-
Poetry Project
- Create a new project with Poetry
- Add dependencies and write a simple application
- Build and package your application
- Share it with a colleague (or another machine)
By practicing these exercises, you'll become proficient in managing virtual environments for your Ubuntu Python development projects.
If you spot any mistakes on this website, please let me know at [email protected]. I’d greatly appreciate your feedback! :)