Creating a Development Environment

This describes how to setup a development environment for working on a project that uses PyGObject, or for working on PyGObject itself. Please follow the instructions on “Getting Started” first, as they are a pre-requirement.

Environment Setup

Install Dependencies

In order to compile Python and pip install pygobject, dependencies are need for your operating system.

Ubuntu / Debian

sudo apt-get install -y python3-venv python3-wheel python3-dev
sudo apt-get install -y libgirepository1.0-dev build-essential \
  libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget \
  curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev


sudo dnf install -y python3-wheel
sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel \
  sqlite sqlite-devel openssl-devel tk-devel git python3-cairo-devel \
  cairo-gobject-devel gobject-introspection-devel

Arch Linux

sudo pacman -S --noconfirm python-wheel
sudo pacman -S --noconfirm base-devel openssl zlib git gobject-introspection


sudo zypper install -y python3-wheel gobject-introspection-devel \
  python3-cairo-devel openssl zlib git
sudo zypper install --type pattern devel_basis


To develop on Windows you need to have MSYS2 installed.

pacman -S --needed --noconfirm base-devel mingw-w64-ucrt-x86_64-toolchain git \
   mingw-w64-ucrt-x86_64-python mingw-w64-ucrt-x86_64-pycairo \
   mingw-w64-ucrt-x86_64-gobject-introspection mingw-w64-ucrt-x86_64-libffi


With homebrew:

brew update
brew install python3 gobject-introspection libffi
export PKG_CONFIG_PATH=/opt/homebrew/opt/libffi/lib/pkgconfig  # use /usr/local/ for older Homebrew installs

Install pyenv (Optional)

pyenv lets you easily switch between multiple versions of Python.


curl | bash
exec $SHELL
pyenv install 3.11
pyenv global 3.11


brew install pyenv
pyenv install 3.11
pyenv global 3.11

Work on PyGObject

Platform Independent Steps

First, check out the source code:

git clone
cd pygobject

It’s always a good idea to work from within a Python virtual environment. PyGObject is built with Meson. In order to support editable installs, Meson-python, Meson, and Ninja should be installed in the virtual environment.

python3 -m venv .venv
source .venv/bin/activate
pip install meson-python meson ninja pycairo


For Python 3.12 and newer, also install setuptools, since distutils is no longer provided in the standard library.

Install PyGObject in your local environment with the --no-build-isolation to allow for dynamic rebuilds

pip install --no-build-isolation --config-settings=setup-args="-Dtests=true" -e '.[dev]'

By default the C libraries are built in “release” mode (no debug symbols). To compile the C libraries with debug symbols, run

pip install --no-build-isolation --config-settings=setup-args="-Dbuildtype=debug" --config-settings=setup-args="-Dtests=true" -e '.[dev]'

Open a Python console:

from gi.repository import GObject

Run the unittests:


It’s also not possible to run the tests from meson:

meson setup _build  # Needed only once
meson test -C _build

Create a release tarball and wheel:

pip install build
python -m build