1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
|
.. include:: ../icons.rst
.. _devenv:
##################################
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 ":ref:`gettingstarted`" first, as they are a pre-requirement.
.. _pipenv-setup:
*****************
Environment Setup
*****************
.. _install-dependencies:
Install Dependencies
====================
In order to compile Python and pip install pygobject, dependencies are need for
your operating system.
=========================================== ======================================== ==============================================
|ubuntu-logo| :ref:`Ubuntu <ubuntu-dep>` |fedora-logo| :ref:`Fedora <fedora-dep>` |arch-logo| :ref:`Arch Linux <arch-dep>`
|windows-logo| :ref:`Windows <windows-dep>` |macosx-logo| :ref:`macOS <macosx-dep>` |opensuse-logo| :ref:`openSUSE <opensuse-dep>`
=========================================== ======================================== ==============================================
.. _ubuntu-dep:
|ubuntu-logo| Ubuntu / |debian-logo| Debian
-------------------------------------------
.. code:: console
sudo apt-get install -y python3-venv python3-wheel python3-dev
sudo apt-get install -y gobject-introspection libgirepository-2.0-dev \
gir1.2-girepository-3.0 build-essential libbz2-dev libreadline-dev \
libssl-dev zlib1g-dev libsqlite3-dev wget curl llvm libncurses-dev \
xz-utils tk-dev libcairo2-dev
.. _fedora-dep:
|fedora-logo| Fedora
--------------------
.. code:: console
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-dep:
|arch-logo| Arch Linux
----------------------
.. code:: console
sudo pacman -S --noconfirm python-wheel
sudo pacman -S --noconfirm base-devel openssl zlib git gobject-introspection
.. _opensuse-dep:
|opensuse-logo| openSUSE
------------------------
.. code:: console
sudo zypper install -y python3-wheel gobject-introspection-devel \
python3-cairo-devel openssl zlib git
sudo zypper install --type pattern devel_basis
.. _windows-dep:
|windows-logo| Windows
----------------------
To develop on Windows you need to have `MSYS2 <https://msys2.org>`_ installed.
.. code:: console
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
.. _macosx-dep:
|macosx-logo| macOS
-------------------
With homebrew:
.. code:: console
brew update
brew install python3 gobject-introspection libffi
export PKG_CONFIG_PATH=$(brew --prefix libffi)/lib/pkgconfig # use /usr/local/ for older Homebrew installs
.. _install-pyenv:
Install `pyenv`_ (Optional)
===========================
`pyenv`_ lets you easily switch between multiple versions of Python.
============================================= =========================================
|linux-logo| :ref:`Linux <linux-pyenv>` |macosx-logo| :ref:`macOS <macosx-pyenv>`
============================================= =========================================
.. _linux-pyenv:
|linux-logo| Linux
------------------
.. code:: console
curl https://pyenv.run | bash
exec $SHELL
pyenv install 3.11
pyenv global 3.11
.. _macosx-pyenv:
|macosx-logo| macOS
-------------------
.. code:: console
brew install pyenv
pyenv install 3.11
pyenv global 3.11
.. _projects-pygobject-dependencies:
*****************
Work on PyGObject
*****************
.. _platform-ind-steps:
Platform Independent Steps
==========================
First, check out the source code:
.. code:: console
git clone https://gitlab.gnome.org/GNOME/pygobject.git
cd pygobject
With a local copy of PyGObject, there's three ways to start developing:
1. PDM, a modern Python package and dependency manager
2. Pip, the default Python package installer
3. Meson, use the Meson build system directly
PDM
---
Make sure you have `PDM <https://pdm-project.org>`_ 2.13 or newer installed.
Then set up the project by running:
.. code:: console
pdm install
You can run the unit tests with:
.. code:: console
pdm run pytest
Pip
---
It's always a good idea to work from within a Python virtual environment.
PyGObject is built with `Meson <https://mesonbuild.com/>`_.
In order to support
`editable installs <https://meson-python.readthedocs.io/en/latest/how-to-guides/editable-installs.html>`_,
Meson-python, Meson, and Ninja should be installed in the virtual environment.
.. code:: console
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install meson-python meson ninja pycairo pytest pre-commit
.. note::
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
.. code:: console
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
.. code:: console
pip install --no-build-isolation --config-settings=setup-args="-Dbuildtype=debug" --config-settings=setup-args="-Dtests=true" -e '.[dev]'
Open a Python console:
.. code:: python
from gi.repository import GObject
Run the unittests:
.. code:: console
pytest
Meson
-----
It's also possible to run the tests from Meson. Tests are still run with Pytest, so it's important
that Pytest is installed.
.. code:: console
meson setup _build # Needed only once
meson test -C _build
Contributing Changes
====================
First off, thank you for considering contributing to PyGObject.
We really appreciate it!
* Create your own fork of the repository
* Add tests for your changes
* Do the changes in your fork
* If you like the change and think the project could use it:
* Make sure you are following the
`GNOME Code of Conduct <https://conduct.gnome.org>`_
* Be sure you have the pre-commit hook installed with:
.. code:: console
pre-commit install
It will ensure that lint and code formatting tools are run automatically.
* Commit your changes
* Create a merge request
.. _pyenv: https://github.com/pyenv/pyenv
|