Appendix 3: Drone plot

8.14. Appendix 3: Drone plot#

Example of drone plot with the cairo library.

try:
    import cairo
    print("La librairie 'cairo' est déjà installée.")
except ImportError:
    print("La librairie 'cairo' n'est pas trouvée. Installation en cours...")
    %pip install pycairo
    import cairo
    print("La librairie 'cairo' a été installée et importée avec succès.")
La librairie 'cairo' n'est pas trouvée. Installation en cours...
Collecting pycairo
  Downloading pycairo-1.28.0.tar.gz (662 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/662.5 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 662.5/662.5 kB 17.2 MB/s  0:00:00
?25h
  Installing build dependencies ... ?25l-
 \
 |
 /
 done
?25h  Getting requirements to build wheel ... ?25ldone
?25h  Preparing metadata (pyproject.toml) ... ?25l-
 \
 error
  error: subprocess-exited-with-error
  
  × Preparing metadata (pyproject.toml) did not run successfully.
   exit code: 1
  ╰─> [465 lines of output]
      + meson setup /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-python-native-file.ini
      The Meson build system
      Version: 1.10.0
      Source dir: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be
      Build dir: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx
      Build type: native build
      Project name: pycairo
      Project version: 1.28.0
      C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0")
      C linker for the host machine: cc ld.bfd 2.42
      Host machine cpu family: x86_64
      Host machine cpu: x86_64
      Program python3 found: YES (/opt/hostedtoolcache/Python/3.9.25/x64/bin/python)
      Compiler for C supports arguments -Wall: YES
      Compiler for C supports arguments -Warray-bounds: YES
      Compiler for C supports arguments -Wcast-align: YES
      Compiler for C supports arguments -Wconversion: YES
      Compiler for C supports arguments -Wextra: YES
      Compiler for C supports arguments -Wformat=2: YES
      Compiler for C supports arguments -Wformat-nonliteral: YES
      Compiler for C supports arguments -Wformat-security: YES
      Compiler for C supports arguments -Wimplicit-function-declaration: YES
      Compiler for C supports arguments -Winit-self: YES
      Compiler for C supports arguments -Winline: YES
      Compiler for C supports arguments -Wmissing-format-attribute: YES
      Compiler for C supports arguments -Wmissing-noreturn: YES
      Compiler for C supports arguments -Wnested-externs: YES
      Compiler for C supports arguments -Wold-style-definition: YES
      Compiler for C supports arguments -Wpacked: YES
      Compiler for C supports arguments -Wpointer-arith: YES
      Compiler for C supports arguments -Wreturn-type: YES
      Compiler for C supports arguments -Wshadow: YES
      Compiler for C supports arguments -Wsign-compare: YES
      Compiler for C supports arguments -Wstrict-aliasing: YES
      Compiler for C supports arguments -Wundef: YES
      Compiler for C supports arguments -Wunused-but-set-variable: YES
      Compiler for C supports arguments -Wswitch-default: YES
      Compiler for C supports arguments -Wno-missing-field-initializers: YES
      Compiler for C supports arguments -Wno-unused-parameter: YES
      Compiler for C supports arguments -fno-strict-aliasing: YES
      Compiler for C supports arguments -fvisibility=hidden: YES
      Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1
      Found CMake: /usr/local/bin/cmake (3.31.6)
      Run-time dependency cairo found: NO (tried pkgconfig and cmake)
      
      ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found, tried pkgconfig and cmake
      
      A full log can be found at /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-logs/meson-log.txt
      ::group::==== CI platform detected, click here for meson-log.txt contents. ====
      Build started at 2026-01-01T14:30:42.231780
      Main binary: /opt/hostedtoolcache/Python/3.9.25/x64/bin/python
      Build Options: -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-python-native-file.ini
      Python system: Linux
      The Meson build system
      Version: 1.10.0
      Source dir: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be
      Build dir: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx
      Build type: native build
      Project name: pycairo
      Project version: 1.28.0
      -----------
      Detecting compiler via: `cc --version` -> 0
      stdout:
      cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
      Copyright (C) 2023 Free Software Foundation, Inc.
      This is free software; see the source for copying conditions.  There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      -----------
      Running command: -cpp -x c -E -dM -
      -----
      -----------
      Detecting linker via: `cc -Wl,--version` -> 0
      stdout:
      GNU ld (GNU Binutils for Ubuntu) 2.42
      Copyright (C) 2024 Free Software Foundation, Inc.
      This program is free software; you may redistribute it under the terms of
      the GNU General Public License version 3 or (at your option) a later version.
      This program has absolutely no warranty.
      -----------
      stderr:
      collect2 version 13.3.0
      /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccXitkRB.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
      -----------
      Sanity testing C compiler: cc
      Is cross compiler: False.
      Sanity check compiler command line: cc sanitycheckc.c -o sanitycheckc.exe -D_FILE_OFFSET_BITS=64
      Sanity check compile stdout:
      
      -----
      Sanity check compile stderr:
      
      -----
      Running test binary command:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/sanitycheckc.exe
      -----------
      Sanity check: `/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/sanitycheckc.exe` -> 0
      C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0")
      C linker for the host machine: cc ld.bfd 2.42
      -----------
      Detecting archiver via: `gcc-ar --version` -> 0
      stdout:
      GNU ar (GNU Binutils for Ubuntu) 2.42
      Copyright (C) 2024 Free Software Foundation, Inc.
      This program is free software; you may redistribute it under the terms of
      the GNU General Public License version 3 or (at your option) any later version.
      This program has absolutely no warranty.
      -----------
      -----------
      Detecting compiler via: `cc --version` -> 0
      stdout:
      cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
      Copyright (C) 2023 Free Software Foundation, Inc.
      This is free software; see the source for copying conditions.  There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      -----------
      Running command: -cpp -x c -E -dM -
      -----
      -----------
      Detecting linker via: `cc -Wl,--version` -> 0
      stdout:
      GNU ld (GNU Binutils for Ubuntu) 2.42
      Copyright (C) 2024 Free Software Foundation, Inc.
      This program is free software; you may redistribute it under the terms of
      the GNU General Public License version 3 or (at your option) a later version.
      This program has absolutely no warranty.
      -----------
      stderr:
      collect2 version 13.3.0
      /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccFotklZ.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
      -----------
      Sanity testing C compiler: cc
      Is cross compiler: False.
      Sanity check compiler command line: cc sanitycheckc.c -o sanitycheckc.exe -D_FILE_OFFSET_BITS=64
      Sanity check compile stdout:
      
      -----
      Sanity check compile stderr:
      
      -----
      Running test binary command:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/sanitycheckc.exe
      -----------
      Sanity check: `/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/sanitycheckc.exe` -> 0
      C compiler for the build machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0")
      C linker for the build machine: cc ld.bfd 2.42
      -----------
      Detecting archiver via: `gcc-ar --version` -> 0
      stdout:
      GNU ar (GNU Binutils for Ubuntu) 2.42
      Copyright (C) 2024 Free Software Foundation, Inc.
      This program is free software; you may redistribute it under the terms of
      the GNU General Public License version 3 or (at your option) any later version.
      This program has absolutely no warranty.
      -----------
      Build machine cpu family: x86_64
      Build machine cpu: x86_64
      Host machine cpu family: x86_64
      Host machine cpu: x86_64
      Target machine cpu family: x86_64
      Target machine cpu: x86_64
      Program python3 found: YES (/opt/hostedtoolcache/Python/3.9.25/x64/bin/python)
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpyuihxem9
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpyuihxem9/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpyuihxem9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wall` -> 0
      Compiler for C supports arguments -Wall: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptvspulbe
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptvspulbe/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptvspulbe/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Warray-bounds` -> 0
      Compiler for C supports arguments -Warray-bounds: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpt__k_07z
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpt__k_07z/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpt__k_07z/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wcast-align` -> 0
      Compiler for C supports arguments -Wcast-align: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpoi1zpi_5
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpoi1zpi_5/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpoi1zpi_5/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wconversion` -> 0
      Compiler for C supports arguments -Wconversion: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp60e7aw3r
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp60e7aw3r/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp60e7aw3r/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wextra` -> 0
      Compiler for C supports arguments -Wextra: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpsxlc9bvl
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpsxlc9bvl/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpsxlc9bvl/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wformat=2` -> 0
      Compiler for C supports arguments -Wformat=2: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpg3a3671q
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpg3a3671q/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpg3a3671q/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wformat-nonliteral` -> 0
      Compiler for C supports arguments -Wformat-nonliteral: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp0f9mnxqf
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp0f9mnxqf/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp0f9mnxqf/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wformat-security` -> 0
      Compiler for C supports arguments -Wformat-security: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpwkpoybfp
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpwkpoybfp/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpwkpoybfp/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wimplicit-function-declaration` -> 0
      Compiler for C supports arguments -Wimplicit-function-declaration: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4naswy1n
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4naswy1n/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4naswy1n/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Winit-self` -> 0
      Compiler for C supports arguments -Winit-self: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp2kea6_dq
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp2kea6_dq/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp2kea6_dq/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Winline` -> 0
      Compiler for C supports arguments -Winline: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpw8sl35ud
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpw8sl35ud/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpw8sl35ud/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wmissing-format-attribute` -> 0
      Compiler for C supports arguments -Wmissing-format-attribute: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp9db9phj5
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp9db9phj5/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp9db9phj5/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wmissing-noreturn` -> 0
      Compiler for C supports arguments -Wmissing-noreturn: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpjv8d6wct
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpjv8d6wct/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpjv8d6wct/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wnested-externs` -> 0
      Compiler for C supports arguments -Wnested-externs: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmphe1jxjxa
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmphe1jxjxa/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmphe1jxjxa/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wold-style-definition` -> 0
      Compiler for C supports arguments -Wold-style-definition: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpecdql3in
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpecdql3in/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpecdql3in/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wpacked` -> 0
      Compiler for C supports arguments -Wpacked: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp352yhikg
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp352yhikg/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp352yhikg/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wpointer-arith` -> 0
      Compiler for C supports arguments -Wpointer-arith: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpksmtzunw
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpksmtzunw/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpksmtzunw/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wreturn-type` -> 0
      Compiler for C supports arguments -Wreturn-type: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpquky24wc
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpquky24wc/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpquky24wc/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wshadow` -> 0
      Compiler for C supports arguments -Wshadow: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4g07wcj2
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4g07wcj2/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4g07wcj2/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wsign-compare` -> 0
      Compiler for C supports arguments -Wsign-compare: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpuw2x57xh
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpuw2x57xh/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpuw2x57xh/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wstrict-aliasing` -> 0
      Compiler for C supports arguments -Wstrict-aliasing: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpzfhxkihb
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpzfhxkihb/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpzfhxkihb/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wundef` -> 0
      Compiler for C supports arguments -Wundef: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpina1pxak
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpina1pxak/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpina1pxak/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wunused-but-set-variable` -> 0
      Compiler for C supports arguments -Wunused-but-set-variable: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkms89tha
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkms89tha/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkms89tha/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wswitch-default` -> 0
      Compiler for C supports arguments -Wswitch-default: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkd1mmzao
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkd1mmzao/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmpkd1mmzao/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wmissing-field-initializers -Wno-missing-field-initializers` -> 0
      Compiler for C supports arguments -Wno-missing-field-initializers: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp8n5at0r5
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp8n5at0r5/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp8n5at0r5/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -Wunused-parameter -Wno-unused-parameter` -> 0
      Compiler for C supports arguments -Wno-unused-parameter: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptzjutt4s
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptzjutt4s/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmptzjutt4s/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -fno-strict-aliasing` -> 0
      Compiler for C supports arguments -fno-strict-aliasing: YES
      Running compile:
      Working directory:  /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4loialq_
      Code:
      extern int i;
      int i;
      
      -----------
      Command line: `cc /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4loialq_/testfile.c -o /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/tmp4loialq_/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -fvisibility=hidden` -> 0
      Compiler for C supports arguments -fvisibility=hidden: YES
      Pkg-config binary missing from cross or native file, or env var undefined.
      Trying a default Pkg-config fallback at pkg-config
      Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1
      Determining dependency 'cairo' with pkg-config executable '/usr/bin/pkg-config'
      env[PKG_CONFIG_PATH]:
      env[PKG_CONFIG]: /usr/bin/pkg-config
      -----------
      Called: `/usr/bin/pkg-config --modversion cairo` -> 1
      stderr:
      Package cairo was not found in the pkg-config search path.
      Perhaps you should add the directory containing `cairo.pc'
      to the PKG_CONFIG_PATH environment variable
      Package 'cairo', required by 'virtual:world', not found
      -----------
      CMake binary for host machine is not cached
      CMake binary missing from cross or native file, or env var undefined.
      Trying a default CMake fallback at cmake
      Found CMake: /usr/local/bin/cmake (3.31.6)
      Extracting basic cmake information
      CMake Toolchain: Calling CMake once to generate the compiler state
      Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/__CMake_compiler_info__ with:
        - "--trace-expand"
        - "--trace-format=json-v1"
        - "--no-warn-unused-cli"
        - "--trace-redirect=cmake_trace.txt"
        - "-G"
        - "Ninja"
        - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/__CMake_compiler_info__/CMakeMesonTempToolchainFile.cmake"
        - "."
      CMake trace warning: add_executable() non imported executables are not supported
      CMake TRACE: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-yb7oHP/CMakeLists.txt:22 add_executable(['cmTC_3eab1'])
      CMake trace warning: target_link_libraries() TARGET cmTC_3eab1 not found
      CMake TRACE: /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-yb7oHP/CMakeLists.txt:28 target_link_libraries(['cmTC_3eab1', ''])
      !meson_ci!/ci_include "/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake"
      Try CMake generator: auto
      !meson_ci!/ci_include "/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/cmake_cairo/CMakeLists.txt"
      Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/cmake_cairo with:
        - "--trace-expand"
        - "--trace-format=json-v1"
        - "--no-warn-unused-cli"
        - "--trace-redirect=cmake_trace.txt"
        - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-7l0rmt8k/pycairo_5e498b618ab4421ea54865106847a5be/.mesonpy-mpf8qyrx/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake"
        - "."
        -- Module search paths:    ['/', '/opt', '/usr', '/usr/local']
        -- CMake root:             /usr/local/share/cmake-3.31
        -- CMake architectures:    ['x86_64-linux-gnu']
        -- CMake lib search paths: ['lib', 'lib32', 'lib64', 'libx32', 'share', '', 'lib/x86_64-linux-gnu']
      Preliminary CMake check failed. Aborting.
      Run-time dependency cairo found: NO (tried pkgconfig and cmake)
      
      ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found, tried pkgconfig and cmake
      
      ::endgroup::
      
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> pycairo

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
?25h
Note: you may need to restart the kernel to use updated packages.
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 2
      1 try:
----> 2     import cairo
      3     print("La librairie 'cairo' est déjà installée.")

ModuleNotFoundError: No module named 'cairo'

During handling of the above exception, another exception occurred:

ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 7
      5 print("La librairie 'cairo' n'est pas trouvée. Installation en cours...")
      6 get_ipython().run_line_magic('pip', 'install pycairo')
----> 7 import cairo
      8 print("La librairie 'cairo' a été installée et importée avec succès.")

ModuleNotFoundError: No module named 'cairo'
import cairo
import io
from IPython.display import Image, SVG, display
import math

# --- Paramètres du drone ---
arm_length = 150             # Longueur du bras du centre au centre du moteur/hélice
propeller_diameter = 100     # Diamètre de l'hélice
motor_radius = 20            # Rayon du disque du moteur
body_width = 80              # Largeur du support central rectangulaire
body_height = 120            # Hauteur du support central rectangulaire

# --- Paramètres du canevas ---
width, height = 600, 600     # Dimensions du canevas en pixels

# Créer une surface SVG en mémoire
# Nous dessinons sur un objet BytesIO pour capturer la sortie SVG
output_buffer = io.BytesIO()
surface = cairo.SVGSurface(output_buffer, width, height)
ctx = cairo.Context(surface)

# --- Configuration du contexte de dessin ---
# Déplacer l'origine au centre du canevas pour faciliter le dessin
ctx.translate(width / 2, height / 2)

# Définir la largeur des lignes par défaut
ctx.set_line_width(2)

# --- Dessin du support central rectangulaire ---
ctx.rectangle(-body_width / 2, -body_height / 2, body_width, body_height)
ctx.set_source_rgb(0.2, 0.2, 0.2) # Gris foncé pour le remplissage
ctx.fill_preserve()
ctx.set_source_rgb(0, 0, 0)     # Noir pour le contour
ctx.stroke()

# --- Angles des bras (en radians) pour une configuration "X" ---
angles_deg = [45, 135, 225, 315]
angles_rad = [math.radians(a) for a in angles_deg]

# --- Dessin des bras, moteurs et hélices ---
for angle in angles_rad:
    # Bras
    ctx.move_to(0, 0) # Partir du centre
    arm_x = arm_length * math.cos(angle)
    arm_y = arm_length * math.sin(angle)
    ctx.line_to(arm_x, arm_y)
    ctx.set_source_rgb(0.5, 0.5, 0.5) # Gris pour le bras
    ctx.stroke()

    # Moteur (disque)
    motor_center_x = arm_x
    motor_center_y = arm_y
    ctx.arc(motor_center_x, motor_center_y, motor_radius, 0, 2 * math.pi)
    ctx.set_source_rgb(0.1, 0.1, 0.1) # Gris très foncé pour le moteur
    ctx.fill_preserve()
    ctx.set_source_rgb(0, 0, 0)     # Noir pour le contour
    ctx.stroke()

    # Hélice (représentée par deux lignes se croisant)
    propeller_half_length = propeller_diameter / 2
    
    # Sauvegarder l'état actuel du contexte pour les transformations locales
    ctx.save() 
    # Déplacer l'origine au centre du moteur pour dessiner l'hélice
    ctx.translate(motor_center_x, motor_center_y) 

    # Première pale d'hélice (horizontale localement)
    ctx.move_to(-propeller_half_length, 0)
    ctx.line_to(propeller_half_length, 0)
    ctx.set_source_rgb(0, 0, 0) # Noir pour l'hélice
    ctx.set_line_width(3)       # Ligne plus épaisse pour l'hélice
    ctx.stroke()

    # Deuxième pale d'hélice (verticale localement)
    ctx.move_to(0, -propeller_half_length)
    ctx.line_to(0, propeller_half_length)
    ctx.stroke()
    ctx.set_line_width(2)       # Rétablir la largeur de ligne par défaut

    # Restaurer l'état précédent du contexte (annuler les translations)
    ctx.restore() 


# Finaliser le dessin sur la surface
surface.finish()

# --- Afficher le dessin dans le notebook ---
# Rembobiner le buffer pour le lire
output_buffer.seek(0)
# Afficher l'image SVG générée
display(SVG(output_buffer.read()))
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[2], line 1
----> 1 import cairo
      2 import io
      3 from IPython.display import Image, SVG, display

ModuleNotFoundError: No module named 'cairo'