From 356b5ce5383e275c993fcc2698b9441ac47669de Mon Sep 17 00:00:00 2001 From: Jeong-Yoon Lee Date: Thu, 5 Feb 2026 16:19:05 -0800 Subject: [PATCH 1/3] Upgrade to manylinux_2_28 and remove scipy version constraints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR modernizes CausalML's wheel distribution by upgrading from manylinux2014 to manylinux_2_28, enabling compatibility with both scipy 1.16.x and 1.17.x without version pinning. ## Changes ### 1. Upgrade manylinux platform tag (pyproject.toml) - **Before:** manylinux2014 (glibc 2.17, CentOS 7 base - EOL June 2024) - **After:** manylinux_2_28 (glibc 2.28, modern standard) ### 2. Remove scipy version constraints - **pyproject.toml:** `scipy>=1.16.0,<1.17.0` → `scipy>=1.16.0` - **docs/environment-py311-rtd.yml:** Removed upper bound constraint - **Benefit:** Support both scipy 1.16.x and 1.17.x automatically ### 3. Document system requirements (docs/installation.rst) Added new "System Requirements" section documenting: - Python 3.11+ requirement - Minimum Linux distributions (Ubuntu 18.04+, RHEL 8+, Debian 10+) - Build-from-source instructions for older systems ## Why This Change? ### Problems with manylinux2014: - Based on CentOS 7 (EOL June 2024) - Required version pinning to avoid scipy 1.17.0 - Prevented access to newer dependency features - Maintenance burden with explicit constraints ### Benefits of manylinux_2_28: - Modern, actively maintained standard - Compatible with scipy 1.16.x AND 1.17.x - No version pinning needed - pip selects the best version - Future-proof for upcoming dependencies - Cleaner dependency declarations ## Compatibility Impact ### Systems That Work: - Ubuntu 18.04 LTS+ (glibc 2.27+) - RHEL/CentOS 8+ (glibc 2.28+) - Debian 10+ (glibc 2.28+) - All recent macOS and Windows versions ### Systems Requiring Source Build: - RHEL/CentOS 7 (glibc 2.17) - Ubuntu 16.04 and earlier - Debian 9 and earlier **Note:** CentOS 7 reached EOL in June 2024, and Ubuntu 16.04 EOL was April 2021, making this upgrade aligned with industry standards. ## scipy Compatibility CausalML uses these scipy modules: - scipy.sparse, scipy.stats - scipy.optimize (fsolve, minimize) - scipy.special (expit, logit) - scipy.interpolate (UnivariateSpline) **None of these are affected by scipy 1.17.0 breaking changes**, which only impact scipy.spatial.transform. Both scipy 1.16.x and 1.17.x work correctly with CausalML. ## Testing Pre-built wheels will now use manylinux_2_28. Users can install with either scipy version: - scipy 1.16.3 (stable, has manylinux2014 wheels) - scipy 1.17.0+ (latest, has manylinux_2_28 wheels) pip will automatically select the appropriate version based on the user's system capabilities. Supersedes: #868 (build-system fix no longer needed with manylinux_2_28) Closes: #863 Co-Authored-By: Claude (claude-sonnet-4-5) --- docs/environment-py311-rtd.yml | 2 +- docs/installation.rst | 17 +++++++++++++++++ pyproject.toml | 6 +++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/environment-py311-rtd.yml b/docs/environment-py311-rtd.yml index c36af222..52729990 100644 --- a/docs/environment-py311-rtd.yml +++ b/docs/environment-py311-rtd.yml @@ -24,7 +24,7 @@ dependencies: - pyro-api>=0.1.2 - pyro-ppl>=1.9.1 - scikit-learn>=1.6.0 - - scipy>=1.16.0,<1.17.0 # Pin to versions with manylinux2014 wheels + - scipy>=1.16.0 - seaborn>=0.13.2 - shap>=0.46.0 - statsmodels>=0.14.5 diff --git a/docs/installation.rst b/docs/installation.rst index 848bf087..4da1f88d 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -6,6 +6,23 @@ Installation with ``conda`` or ``pip`` is recommended. Developers can follow th To use models under the ``inference.tf`` or ``inference.torch`` module (e.g. ``DragonNet`` or ``CEVAE``), additional dependency of ``tensorflow`` or ``torch`` is required. For detailed instructions, see below. +System Requirements +------------------- + +**Python Version:** Python 3.11 or later is required. + +**Linux Distributions:** Pre-built binary wheels require a Linux distribution with glibc 2.27 or later: + +* **Ubuntu:** 18.04 LTS or later +* **RHEL/CentOS:** 8 or later +* **Debian:** 10 (Buster) or later +* **Fedora:** 32 or later + +.. note:: + For older Linux distributions (e.g., RHEL 7, Ubuntu 16.04), you will need to build CausalML from source. See **Install from source** below. + +**macOS and Windows:** All recent versions are supported. + Install using ``conda`` ----------------------- diff --git a/pyproject.toml b/pyproject.toml index 014c4906..5db577c2 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ dependencies = [ "forestci==0.6", "pathos==0.2.9", "numpy>=1.25.2", - "scipy>=1.16.0,<1.17.0", # Pin to versions with manylinux2014 wheels (1.17.0+ requires manylinux_2_27) + "scipy>=1.16.0", "matplotlib", "pandas>=0.24.1", "scikit-learn>=1.6.0", @@ -71,7 +71,7 @@ homepage = "https://github.com/uber/causalml" [tool.cibuildwheel] build = ["cp311-*", "cp312-*"] build-verbosity = 1 -manylinux-x86_64-image = "manylinux2014" -manylinux-aarch64-image = "manylinux2014" +manylinux-x86_64-image = "manylinux_2_28" +manylinux-aarch64-image = "manylinux_2_28" # Skip 32-bit builds skip = ["*-win32", "*-manylinux_i686", "*-musllinux*"] From e08981dbc4ebbe5964c3d60272d8a14c45251682 Mon Sep 17 00:00:00 2001 From: Jeong-Yoon Lee Date: Thu, 5 Feb 2026 18:45:40 -0800 Subject: [PATCH 2/3] Fix glibc version requirement: manylinux_2_28 requires glibc 2.28, not 2.27 Copilot correctly identified that Ubuntu 18.04 is NOT compatible with manylinux_2_28 wheels. Ubuntu 18.04 has glibc 2.27, but manylinux_2_28 requires glibc 2.28 or later. Changes: - Updated glibc requirement from 2.27 to 2.28 - Changed minimum Ubuntu version from 18.04 to 20.04 LTS (has glibc 2.31) - Added Ubuntu 18.04 to the list of distributions requiring source build This ensures users have accurate information about system requirements. Co-Authored-By: Claude (claude-sonnet-4-5) --- docs/installation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 4da1f88d..8a52737b 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -11,15 +11,15 @@ System Requirements **Python Version:** Python 3.11 or later is required. -**Linux Distributions:** Pre-built binary wheels require a Linux distribution with glibc 2.27 or later: +**Linux Distributions:** Pre-built binary wheels require a Linux distribution with glibc 2.28 or later: -* **Ubuntu:** 18.04 LTS or later +* **Ubuntu:** 20.04 LTS or later * **RHEL/CentOS:** 8 or later * **Debian:** 10 (Buster) or later * **Fedora:** 32 or later .. note:: - For older Linux distributions (e.g., RHEL 7, Ubuntu 16.04), you will need to build CausalML from source. See **Install from source** below. + For older Linux distributions (e.g., RHEL 7, Ubuntu 16.04, Ubuntu 18.04), you will need to build CausalML from source. See **Install from source** below. **macOS and Windows:** All recent versions are supported. From 84bfead385e81995fee190933e491dd8dff8204d Mon Sep 17 00:00:00 2001 From: Jeong-Yoon Lee Date: Thu, 5 Feb 2026 22:31:14 -0800 Subject: [PATCH 3/3] Bump version to 0.16.0 and update changelog for breaking changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This release introduces breaking changes in Linux wheel compatibility due to the manylinux_2_28 upgrade, warranting a minor version bump from 0.15.6 to 0.16.0. Changes: - Updated version in pyproject.toml: 0.15.6 → 0.16.0 - Added comprehensive 0.16.0 changelog entry documenting: - Breaking change: manylinux_2_28 requirement (glibc 2.28+) - Affected systems and migration path - scipy version pin removal - Related PRs (#869, #867, #865, #864) Breaking Changes: - Pre-built wheels require Ubuntu 20.04+, RHEL 8+, Debian 10+ (glibc 2.28+) - Users on Ubuntu 18.04, RHEL 7, etc. must build from source - Python 3.11+ required (already enforced in previous release) This follows semantic versioning: minor version bump for backward- incompatible changes to wheel distribution. Co-Authored-By: Claude (claude-sonnet-4-5) --- docs/changelog.rst | 38 ++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index ad6291b9..fee16a21 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,44 @@ Changelog You can find the latest changes in the `GitHub releases `_ +0.16.0 (Feb 2026) +----------------- +* **BREAKING CHANGE:** This release upgrades from manylinux2014 to manylinux_2_28 for Linux wheel distribution. +* Pre-built wheels now require glibc 2.28 or later (Ubuntu 20.04+, RHEL 8+, Debian 10+). +* Users on older Linux distributions (Ubuntu 18.04, RHEL 7, etc.) must build from source. +* Removes scipy version pin, enabling compatibility with both scipy 1.16.x and 1.17.x. + +Updates +~~~~~~~ +* Upgrade to manylinux_2_28 and remove scipy version constraints by @jeongyoonlee in https://github.com/uber/causalml/pull/869 +* Upgrade cibuildwheel to v3.3.1 and remove deprecated macos-13 runner by @jeongyoonlee in https://github.com/uber/causalml/pull/867 +* Fix Ubuntu packaging failure - scipy manylinux compatibility by @jeongyoonlee in https://github.com/uber/causalml/pull/865 +* Fix Ubuntu packaging failure by aligning cibuildwheel config with Python version requirement by @jeongyoonlee in https://github.com/uber/causalml/pull/864 + +Breaking Changes +~~~~~~~~~~~~~~~~ +* **Linux wheel compatibility:** Pre-built wheels require glibc 2.28+ (manylinux_2_28) + + * ✅ **Supported:** Ubuntu 20.04+, RHEL/CentOS 8+, Debian 10+, Fedora 32+ + * ⚠️ **Requires source build:** Ubuntu 18.04, RHEL 7, Ubuntu 16.04, Debian 9 + +* **Python version:** Minimum Python version is 3.11 (updated from 3.9) + +Migration Notes +~~~~~~~~~~~~~~~ +If you are on an older Linux distribution: + +1. **Check your glibc version:** ``ldd --version`` +2. **If glibc < 2.28:** Install from source instead of using pip wheels: + + .. code-block:: bash + + git clone https://github.com/uber/causalml.git + cd causalml + pip install -e . + +3. **Recommended:** Upgrade to a modern Linux distribution (Ubuntu 20.04+, RHEL 8+) + 0.15.1 (Apr 2024) ----------------- * This release fixes the build failure on macOS and a few bugs in ``UpliftTreeClassifier``. diff --git a/pyproject.toml b/pyproject.toml index 5db577c2..883c42bc 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "causalml" -version = "0.15.6" +version = "0.16.0" description = "Python Package for Uplift Modeling and Causal Inference with Machine Learning Algorithms" readme = { file = "README.md", content-type = "text/markdown" }