Creating a Development Environment — PyGObject

# 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 | Fedora | Arch Linux
Windows | macOS | openSUSE

#### 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

#### Fedora

    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

#### openSUSE

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

#### Windows

    pacman -S --needed --noconfirm base-devel mingw-w64-x86_64-toolchain git \
       mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-cairo \
       mingw-w64-x86_64-gobject-introspection mingw-w64-x86_64-libffi

#### macOS

With homebrew:

    brew update
    brew install pyenv pipx
    brew install pipx
    pipx ensurepath

### Install pyenv

pyenv lets you easily switch between multiple versions of Python.

Linux | macOS

#### Linux

    curl https://pyenv.run | bash
    exec $SHELL
    pyenv install 3.11
    pyenv global 3.11

#### macOS

    pyenv install 3.11
    pyenv global 3.11

### Install Poetry

Poetry is a tool for dependency management and packaging in Python, we’ll install it with pipx which installs Python CLI tools in to separate virtualenvs.

Linux | macOS
Windows |

#### Linux

    python3 -m pip install --user pipx
    python3 -m pipx ensurepath
    pipx install poetry

#### Windows

    python.exe -m pip install --user pipx
    python.exe -m pipx ensurepath
    pipx install poetry

#### macOS

With homebrew:

    pipx install poetry

## Work on PyGObject

### Platform Independent Steps

If you are going to work on developing PyGObject itself, then do the following additional steps:

    git clone https://gitlab.gnome.org/GNOME/pygobject.git
    cd pygobject
    poetry install
    poetry shell