Skip to content

Python versions

The library supports Python >= 3.9, < 4.0.

Updating your Python version

There are several common approaches for managing and isolating your Python environment when using Testcontainers (or any Python project). Each has its own trade-offs in terms of reproducibility, ease of use, and integration with tooling:

venv (built-in virtual environments)

What it is

Python’s built-in way to create lightweight environments.

How to use

python3 -m venv .venv # create an env in “.venv”
source .venv/bin/activate # on Unix/macOS
.venv\Scripts\activate # on Windows
pip install -r requirements.txt
Pros Cons
No extra dependencies You still manage requirements.txt by hand
Very lightweight Doesn’t provide lockfiles or dependency resolution
Works everywhere Python 3.3+ is installed

virtualenv (stand-alone)

What it is

A more mature alternative to venv, sometimes faster and with more features.

How to use

pip install virtualenv
virtualenv .env
source .env/bin/activate
pip install -r requirements.txt
Pros Cons
Slightly more flexible than venv (e.g. can target different interpreters) Still manual management of versions and dependencies

pipenv

What it is

A higher-level tool combining environment creation with Pipfile dependency management.

How to use

pip install pipenv
pipenv install --dev testcontainers
pipenv shell

Dependencies live in Pipfile; exact versions locked in Pipfile.lock.

Pros Cons
Automatic creation of a virtualenv Can be slower, historically some performance quirks
Lockfile for reproducible installs
pipenv run … to avoid activating shells

poetry

What it is

A modern dependency manager and packaging tool, with built-in virtualenv support.

How to use

curl -sSL https://install.python-poetry.org | python3 -
poetry init # walk you through pyproject.toml creation
poetry add --dev testcontainers
poetry shell

Your Python version constraints and dependencies are in pyproject.toml; lockfile is poetry.lock.

Pros Cons
Elegant TOML-based config A bit of a learning curve if you’re used to plain Pip
Creates truly reproducible environments
Supports publishing packages to PyPI out of the box

conda / mamba

What it is

Cross-language environment and package manager (Python/R/C++).

How to use

conda create -n tc-env python=3.10
conda activate tc-env
conda install pip
pip install testcontainers

Or with Mamba for faster solves:

mamba install pip
mamba install -c conda-forge testcontainers
Pros Cons
Manages non-Python dependencies easily (e.g., system libraries) Larger disk footprint
Reproducible YAML environment files (environment.yml) Less “pure” Python workflow

Docker-based environments

What it is

Run your tests inside a Docker image, so everything (even Python itself) is containerized.

How to use

FROM python:3.10-slim
WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN pip install poetry && poetry install --no-root
COPY . .
CMD ["pytest", "--maxfail=1", "--disable-warnings", "-q"]
Pros Cons
True isolation from host machine (including OS libs) Slower startup/testing cycle
Easy to share exact environment via Dockerfile Extra complexity if you’re not already Docker-savvy

tox for multi-env testing

What it is

A tool to automate testing across multiple Python versions/environments.

How to use

# tox.ini

[tox]
envlist = py39,py310,py311

[testenv]
deps = pytest
testcontainers
commands = pytest
Pros Cons
Ensures compatibility across multiple Python interpreters Adds another layer of config
Isolates each test run in its own venv

Choosing the Right Tool

Tool Lockfile? Built-in Env Cross-Platform Non-Python Deps Reproducibility
venv No Yes Yes No Low
virtualenv No Yes Yes No Low
pipenv Yes Yes Yes No Medium
poetry Yes Yes Yes No High
conda Yes (YML) Yes Yes Yes High
Docker Container Yes Yes Very High

Next Steps

With any of these, once your environment is set up you can simply pip install testcontainers (or use Poetry’s poetry add --dev testcontainers) and begin writing your container-backed tests in Python.

See the General Docker Requirements to continue