Cygwin provides python3x-matplotlib packages for Python 3.6 to 3.9, but not for Python 3.12. I was able to build and install matplotlib 3.10.8 (tested using attached Python script) from source using pip3.12 after applying a small patch to the build script (see attached Bash script) and installing the most recent Cygwin packages python312-tkinter and tcl-tk-devel
(not sure if both are needed).
It would be very convenient to have a Cygwin package python312-matplotlib, but I'm not knowledgable enough to generate such a package myself. Are there any plans to provide such a package?
Falk
#!/usr/bin/bash
# This script builds and installs matplotlib from source on Windows using 
Cygwin.
# Tested with: Cygwin 3.6.6, g++ 13.4.0, Python 3.12.12, pip 26.0.1, matplotlib 
3.10.8
# It assumes that Python 3.12 and the matching pip are already installed and 
available in the PATH.
# It also assumes that the user has downloaded the matplotlib source archive 
and placed it in his Downloads folder.
# The script applies a patch to the meson.build file to disable LTO and use 
gnu++17, which is necessary for compatibility with the current Cygwin toolchain.
# Without this patch (i.e. when simply calling 'pip3 install matplotlib'), the 
build would fail with the following errors:
# - Compilation using 'c++17' without GNU extensions: missing typedef for 
'u_int' and missing 'strdup()' function
# - Linking using LTO: "cannot export XXX: symbol wrong type (4 vs 3)" for many 
symbols corresponding to C++ lambda functions
# TODO: Check if it is possible to keep LTO enabled using other linker flags 
(e.g. -fno-use-linker-plugin ???)
set -euo pipefail
uname -a
g++ --version
python --version
pip3 --version
download_dir=$(cygpath "${USERPROFILE}")/Downloads
mpl_archive=matplotlib-3.10.8.tar.gz
if [ ! -f ${download_dir}/${mpl_archive} ]; then
    echo "Please download ${mpl_archive} from 
https://pypi.org/project/matplotlib/#files and place it in ${download_dir}" >&2
    exit 1
fi
build_dir=/tmp/$(basename ${mpl_archive} .tar.gz)
if [ ! -d ${build_dir} ]; then
    tar xf ${download_dir}/${mpl_archive} -C /tmp
fi
cd ${build_dir}
patch <<EOF
--- meson.build~        2025-11-13 03:07:31.000000000 +0100
+++ meson.build 2026-02-12 16:09:08.092178800 +0100
@@ -25,8 +25,8 @@
   ],
   meson_version: '>=1.1.0',
   default_options: [
-    'b_lto=true',
-    'cpp_std=c++17',
+    'b_lto=false',
+    'cpp_std=gnu++17',
     'auto_features=disabled',  # Force FreeType to avoid extra dependencies.
   ],
 )
EOF
pip3 install -U .
#!/usr/bin/env python3
# NOTE: This script is intended to be run in a Cygwin environment on Windows,
# where matplotlib has been installed using the provided bash script.
# It demonstrates a simple plot of sine and cosine functions using matplotlib.
# Cygwin-X / XWin Server must be installed and running and the DISPLAY 
environment
# variable shall be properly set (":0" should work on most systems) to display 
the plot.
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

print(f'Found: {matplotlib.__version__=} ; {np.__version__=}')
x = np.linspace(0, 10*np.pi, 1000)
plt.plot(x, np.sin(x), x, np.cos(x))
plt.grid()

try:
    import pandas as pd
    print(f'Found: {pd.__version__=} ; {pd.options.plotting.backend=}')
    fig = pd.DataFrame(np.random.random_sample((100, 2)), columns=['A', 
'B']).hist()
except ImportError:
    print('pandas not installed')

plt.show()
-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to