Power Global

Power Global

A central meeting place for IBM Power. Connect, ask questions, share ideas, and explore the full spectrum of Power technologies across workloads, industries, and use cases.


#TechXchangePresenter
#Power

 View Only

Developing applications using Python Packages on IBM Power

By Janani Janakiraman posted Thu September 11, 2025 09:11 AM

  

Are you an independent software vendor (ISV) or a customer looking to develop Python applications on the IBM Power platform? Then this blog is for you! It walks you through some examples of using the IBM Open Source Edge and the IBM optimized, prebuilt Python wheels for developing Python applications on IBM Power.

Open Source Edge for IBM

The Open Source Edge for IBM is a centralized tool designed to help developers keep up with the growing number of open-source packages and ensure they are enabled to run on IBM Power systems.

With this tool, you can:

  • Search for key dependencies and evaluate their availability and suitability for IBM Power.

  • Access build scripts, source code, or container images if a package version has been ported.

  • Contribute build scripts for packages or request new packages to be added.

The tool is community-friendly and welcomes contributions from both IBM and external developers.

👉 Watch the demo on Open Source Edge for IBM and try the tool yourself. 

Optimized Python Wheels for IBM Power

IBM is building a curated set of open-source Python packages natively on IBM Power and making them available via a DevPi server as Python wheels. These packages are selected based on ongoing AI projects across the Power ecosystem and provide a solid foundation for Python development on:

  • IBM Power9

  • IBM Power10

  • IBM Power11

Why Optimized Wheels Matter

By leveraging the unique capabilities of IBM Power architecture, these optimized wheels can significantly enhance the performance and efficiency of your Python applications on IBM Power servers. Benefits include:

  • ⚡ Faster data analysis and machine learning workflows

  • 🧠 Improved performance for deep learning and generative AI applications

  • 🚀 Increased productivity for development teams

Accessing the Wheel Repository

The wheel repository is hosted on a DevPi Server at:

🔗 https://wheels.developerfirst.ibm.com/ppc64le/linux

1.    📌   To make it easier to discover and use available wheels, we provide a central wheel index.

  •  DevpiWheelsIndex.md  - Lists all available wheels along with their versions and suffixes and licenses, making it easy to find and copy the required package version.
  •  Python version specific indexes   - Separate lists help you quickly identify wheels compatible with Python 3.9, 3.10, 3.11, 3.12 and 3.13.

 📌   The https://wheels.developerfirst.ibm.com/ppc64le/linux page only lists the latest version of a package. To see all the versions of a package for which wheels are provided, see "Simple Index" page. As an example, here is the output you would see for the  abseil-cpp package.

image

 

Version Suffix System for Wheels

To improve transparency and traceability of wheel updates, a version‑suffix mechanism has been introduced for IBM Power wheels:

  • Newly published wheels include the default suffix ppc64le1.
  • When updates are made to the same upstream package version, the suffix is incremented (e.g., ppc64le2, ppc64le3).

This scheme enables delivery of incremental improvements without changing the original upstream package version while providing a clear method to identify updated builds.

Removal of LD_LIBRARY_PATH Requirement

Python packages on IBM Power previously relied on setting the LD_LIBRARY_PATH environment variable to locate native libraries, which often created friction during installation and setup.

With recent enhancements, Power manylinux wheels now automatically bundle and manage required native dependencies, eliminating the need for LD_LIBRARY_PATH. These wheels install cleanly across major Linux distributions, including SLES, Ubuntu, RHEL, and others.

Installing a wheel is now as simple as:

pip install --prefer-binary <package_name>==<version> \
  --extra-index-url=https://wheels.developerfirst.ibm.com/ppc64le/linux

Tip:
You no longer need to set LD_LIBRARY_PATH. Packages work immediately and work consistently across Linux environments.

Note:
Legacy wheels that do not include manylinux support still require LD_LIBRARY_PATH for correct execution.

image

Verifying that a Python Package Uses the Optimized IBM Power Wheel

To confirm that a Python package installed on your system originates from the optimized IBM Power wheel repository (https://wheels.developerfirst.ibm.com/ppc64le/linux), you can inspect the package metadata using pip show.

In the example below, we check the metadata for the pillow package:
pip show pillow -v | grep MetaData
If the package was installed from the IBM Power optimized wheel, the output will contain a marker similar to:
Environment :: MetaData :: IBM Python Ecosystem


Getting Started with Your Application

To take full advantage of the optimized Python wheels for IBM Power, follow these steps to set up your development environment and test package installation.

✅ Recommended Python Versions

Use Python 3.10, 3.11, or 3.12 — these versions have the broadest support for prebuilt packages in the IBM wheel repository.

🛠️ Step 1: Create a Local Virtual Environment

Creating a virtual environment helps isolate dependencies and ensures a clean setup.

python3.12 -m venv venv
source venv/bin/activate

🧪 Example 1: Install a Package from the IBM Optimized Wheel Repository

Let’s install the pillow package using pip, prioritizing the prebuilt Power binaries from IBM’s DevPi server.

#!/bin/bash
# The pip --prefer-binary option prioritizes prebuilt Power binaries over building packages from source distributions, 
# even if a newer source distribution is available
#
# The pip --extra-index-url option specifies the IBM optimized wheel repository as an additional package index where pip should search for packages,
# in addition to the default PyPI (Python Package Index) or any index specified with --index-url.
$ pip install --prefer-binary pillow --extra-index-url=https://wheels.developerfirst.ibm.com/ppc64le/linux

Sample Output:

((venv) ) $ pip install --prefer-binary pillow --extra-index-url=https://wheels.developerfirst.ibm.com/ppc64le/linux
Looking in indexes: https://pypi.org/simple, https://wheels.developerfirst.ibm.com/ppc64le/linux
Collecting pillow
  Downloading https://wheels.developerfirst.ibm.com/ppc64le/linux/%2Bf/05f/232918bf94c8d/pillow-11.3.0%2Bppc64le1-cp312-cp312-manylinux_2_34_ppc64le.whl (2.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 MB 19.7 MB/s eta 0:00:00
Installing collected packages: pillow
Successfully installed pillow-11.3.0+ppc64le1

🎉 Success! You’ve installed a prebuilt, optimized wheel for IBM Power.


🧪 Example 2: Training a LightGBM Model with AI/ML Packages

This example demonstrates how to build a simple machine learning application using LightGBM, scikit-learn, PyArrow, and Pillow on IBM Power. The application trains a model on an Iris-like dataset, generates predictions, and outputs visuals and metadata. You can find the full source code for this example in the pyeco GitHub repository: 🔗lightgbm-pyarrow-example

🔍 Summary of Steps

  1. Create a virtual environment using Python 3.12

  2. Install required packages from the IBM optimized wheel repository

  3. Resolve runtime errors related to native libraries and dependencies

  4. Run the application and validate functionality

  5. Generate a pinned requirements.txt for reproducibility

🛠️ Step-by-Step Installation

✅ Create a Virtual Environment

python3.12 -m venv myvenv
source myvenv/bin/activate

📦 Install AI/ML Packages

Each command uses --prefer-binary and --extra-index-url to prioritize IBM's optimized wheels.

# Install LightGBM (pulls in numpy and scipy)
pip install lightgbm==4.5.0 pyarrow==18.0.0 pillow==11.2.1 scikit-learn==1.5.2  \
  --prefer-binary \
  --extra-index-url=https://wheels.developerfirst.ibm.com/ppc64le/linux

🧯 Troubleshooting Runtime Errors

⚠️ Dependency Conflicts - Conflicting versions of numpy caused runtime issues.
(.venv) [root@dcfbad9f5448 /]# python lightgbm-pyarrow-example.py

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.3.1 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Solution: Downgrade numpy to a compatible version:

pip install numpy==1.26.4 \
  --prefer-binary \
  --extra-index-url=https://wheels.developerfirst.ibm.com/ppc64le/linux

✅ Finalizing the Environment

Once your application runs successfully, freeze the environment to capture exact versions:

pip freeze > requirements.txt

Sample requirements.txt:

joblib==1.5.3
lightgbm==4.5.0+ppc64le1
numpy==1.26.4+ppc64le1
pillow==11.2.1+ppc64le1
pyarrow==18.0.0+ppc64le1
scikit-learn==1.5.2+ppc64le1
scipy==1.17.0+ppc64le1
threadpoolctl==3.6.0

📌 Why Pinning Versions Matters

  • Ensures consistent installs across environments

  • Improves reproducibility in CI/CD pipelines

  • Simplifies debugging and dependency management

  • Prevents unexpected changes in transitive dependencies


🧪 Example 3: Building docling Using Pre‑requisites from the Python Wheel Repository for IBM Power

Docling streamlines end-to-end document processing, offering robust multi-format parsing -including advanced PDF understanding - and seamless integration with GenAI tools. Get quicker access to the latest Docling capabilities by leveraging the optimized prerequisite wheels from the IBM Python Wheel Repository for Power. Don't wait for pre-built packages, just use the provided wheels and build Docling from source.

A step‑by‑step guide is available in the blog
👉 https://community.ibm.com/community/user/blogs/paul-bastide/2026/03/20/docling-with-ibm-power

📌 Key Takeaways:

If the AI package you need isn’t yet available in the IBM repository, you can still build it directly from source. Speed up the build process by installing prerequisite dependencies that already exist as optimized wheels for IBM Power.

This approach helps you stay current with the latest updates, experiment more easily, and accelerate your development workflow on IBM Power.


📚 Additional Examples

For more hands-on demonstrations, visit the examples directory in the pyeco GitHub repository. These examples are designed to help users understand and utilize IBM Power-optimized Python packages effectively.

🔧 What You'll Find

The repository includes:

  • Example workflows using AI/ML and data processing packages

  • Shell scripts to automate setup and execution

  • Python scripts showcasing real-world use cases


▶️ How to Run an Example

Each example directory contains a run-example.sh script that guides you through the setup and execution process.

This script:

  • Detects your Linux distribution and installs required system dependencies

  • Creates a dedicated Python virtual environment

  • Installs all required packages using a pinned requirements.txt

  • Verifies the installation and runs the example along with sub-tests to ensure functionality

cd examples/<python version>/<example-name>
./install_test_example.sh

📦 Available Packages and Versions

The IBM Optimized Wheel repository at
🔗 wheels.developerfirst.ibm.com/ppc64le/linux
currently includes a curated selection of Python packages and versions built natively for IBM Power.

We’re actively expanding this list based on community feedback and user needs. If you don’t find a required package in the repository:

  1. Visit the Open Source Edge (OSE) portal to check the package’s availability status.

  2. Look for an existing build script for the package.

  3. Update the script to support the version you need.

  4. Contribute your changes by submitting a pull request to the OSE build-scripts repository.

We’ll review your contribution and, as time permits, work to make the optimized version available as a wheel.


💬 Feedback and Suggestions

We’d love to hear from you!

  • Try out the examples and share how you plan to use these optimized wheels.

  • Suggest packages or versions you'd like to see added.

  • Help us improve the repository to better support your development needs.

You can:

  • Add a comment to this blog post

  • Submit feedback or feature requests by opening an Issue in the pyeco GitHub repository

Your input is invaluable to shaping the future of Python development on IBM Power.


✅ Key Takeaways

  • IBM Power-optimized Python wheels are available via a DevPi repository, offering performance and compatibility benefits for AI/ML workloads.

  • Use Python 3.10–3.12 for best compatibility with the available wheels.

  • Create a virtual environment and use --prefer-binary and --extra-index-url to install packages from the IBM wheel repository.

  • The Open Source Edge for IBM (OSE) tool helps evaluate package availability and encourages community contributions to build scripts.

  • Example workflows in the pyeco GitHub repository provide practical guidance for setup and execution.

  • Use pinned versions in your requirements.txt to ensure reproducibility and stability across environments.

  • Community feedback is welcome! Suggest packages, report issues, or contribute via GitHub to help grow the ecosystem.


🙌 Acknowledgments

Thanks to the incredible development team behind this initiative.

AI Disclosure: Sections of this blog/Images were generated with support from an AI assistant. The author has reviewed, tested, and refined all material to ensure accuracy, completeness, and compliance with IBM’s technical and editorial standards.

Last Updated: March 23, 2026

2 comments
148 views

Permalink

Comments

Thu October 30, 2025 03:38 PM

@Georges Kopp -- I am not sure what you mean by using this product to link a screen definition in Python wiht a RPG IV full free format program. 

If you were developing a GUI  for your screen definition in Python on IBM Power and needed some packages that were ported to power, you can use  the repository of Python wheels we have already ported and made available to use in your program. 

Fri September 12, 2025 06:13 AM

Very interesting product.

As you know next IBM i version will banish SDA, etc.

I wonder if with this product is possible to "link" a screen definition in Python with an RPG IV full free format program?

Thank you!

Georges Kopp