Skip to content

Commit db11de2

Browse files
jeongyoonleeclaude
andauthored
Release v0.16.0: Upgrade to manylinux_2_28 and remove scipy version constraints (#869)
* Upgrade to manylinux_2_28 and remove scipy version constraints 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) <noreply@anthropic.com> * 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) <noreply@anthropic.com> * Bump version to 0.16.0 and update changelog for breaking changes 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) <noreply@anthropic.com> --------- Co-authored-by: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
1 parent 9b6f20a commit db11de2

File tree

4 files changed

+60
-5
lines changed

4 files changed

+60
-5
lines changed

docs/changelog.rst

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,44 @@ Changelog
55

66
You can find the latest changes in the `GitHub releases <https://github.com/uber/causalml/releases>`_
77

8+
0.16.0 (Feb 2026)
9+
-----------------
10+
* **BREAKING CHANGE:** This release upgrades from manylinux2014 to manylinux_2_28 for Linux wheel distribution.
11+
* Pre-built wheels now require glibc 2.28 or later (Ubuntu 20.04+, RHEL 8+, Debian 10+).
12+
* Users on older Linux distributions (Ubuntu 18.04, RHEL 7, etc.) must build from source.
13+
* Removes scipy version pin, enabling compatibility with both scipy 1.16.x and 1.17.x.
14+
15+
Updates
16+
~~~~~~~
17+
* Upgrade to manylinux_2_28 and remove scipy version constraints by @jeongyoonlee in https://github.com/uber/causalml/pull/869
18+
* Upgrade cibuildwheel to v3.3.1 and remove deprecated macos-13 runner by @jeongyoonlee in https://github.com/uber/causalml/pull/867
19+
* Fix Ubuntu packaging failure - scipy manylinux compatibility by @jeongyoonlee in https://github.com/uber/causalml/pull/865
20+
* Fix Ubuntu packaging failure by aligning cibuildwheel config with Python version requirement by @jeongyoonlee in https://github.com/uber/causalml/pull/864
21+
22+
Breaking Changes
23+
~~~~~~~~~~~~~~~~
24+
* **Linux wheel compatibility:** Pre-built wheels require glibc 2.28+ (manylinux_2_28)
25+
26+
* ✅ **Supported:** Ubuntu 20.04+, RHEL/CentOS 8+, Debian 10+, Fedora 32+
27+
* ⚠️ **Requires source build:** Ubuntu 18.04, RHEL 7, Ubuntu 16.04, Debian 9
28+
29+
* **Python version:** Minimum Python version is 3.11 (updated from 3.9)
30+
31+
Migration Notes
32+
~~~~~~~~~~~~~~~
33+
If you are on an older Linux distribution:
34+
35+
1. **Check your glibc version:** ``ldd --version``
36+
2. **If glibc < 2.28:** Install from source instead of using pip wheels:
37+
38+
.. code-block:: bash
39+
40+
git clone https://github.com/uber/causalml.git
41+
cd causalml
42+
pip install -e .
43+
44+
3. **Recommended:** Upgrade to a modern Linux distribution (Ubuntu 20.04+, RHEL 8+)
45+
846
0.15.1 (Apr 2024)
947
-----------------
1048
* This release fixes the build failure on macOS and a few bugs in ``UpliftTreeClassifier``.

docs/environment-py311-rtd.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ dependencies:
2424
- pyro-api>=0.1.2
2525
- pyro-ppl>=1.9.1
2626
- scikit-learn>=1.6.0
27-
- scipy>=1.16.0,<1.17.0 # Pin to versions with manylinux2014 wheels
27+
- scipy>=1.16.0
2828
- seaborn>=0.13.2
2929
- shap>=0.46.0
3030
- statsmodels>=0.14.5

docs/installation.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,23 @@ Installation with ``conda`` or ``pip`` is recommended. Developers can follow th
66

77
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.
88

9+
System Requirements
10+
-------------------
11+
12+
**Python Version:** Python 3.11 or later is required.
13+
14+
**Linux Distributions:** Pre-built binary wheels require a Linux distribution with glibc 2.28 or later:
15+
16+
* **Ubuntu:** 20.04 LTS or later
17+
* **RHEL/CentOS:** 8 or later
18+
* **Debian:** 10 (Buster) or later
19+
* **Fedora:** 32 or later
20+
21+
.. note::
22+
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.
23+
24+
**macOS and Windows:** All recent versions are supported.
25+
926
Install using ``conda``
1027
-----------------------
1128

pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "causalml"
3-
version = "0.15.6"
3+
version = "0.16.0"
44
description = "Python Package for Uplift Modeling and Causal Inference with Machine Learning Algorithms"
55
readme = { file = "README.md", content-type = "text/markdown" }
66

@@ -26,7 +26,7 @@ dependencies = [
2626
"forestci==0.6",
2727
"pathos==0.2.9",
2828
"numpy>=1.25.2",
29-
"scipy>=1.16.0,<1.17.0", # Pin to versions with manylinux2014 wheels (1.17.0+ requires manylinux_2_27)
29+
"scipy>=1.16.0",
3030
"matplotlib",
3131
"pandas>=0.24.1",
3232
"scikit-learn>=1.6.0",
@@ -71,7 +71,7 @@ homepage = "https://github.com/uber/causalml"
7171
[tool.cibuildwheel]
7272
build = ["cp311-*", "cp312-*"]
7373
build-verbosity = 1
74-
manylinux-x86_64-image = "manylinux2014"
75-
manylinux-aarch64-image = "manylinux2014"
74+
manylinux-x86_64-image = "manylinux_2_28"
75+
manylinux-aarch64-image = "manylinux_2_28"
7676
# Skip 32-bit builds
7777
skip = ["*-win32", "*-manylinux_i686", "*-musllinux*"]

0 commit comments

Comments
 (0)