Skip to content

Commit

Permalink
Merge pull request #428 from jacklovell/v081_buildfix
Browse files Browse the repository at this point in the history
V0.8.1 buildfix
  • Loading branch information
CnlPepper authored Jan 4, 2024
2 parents ea5bc96 + 2b377c4 commit 20f5725
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 61 deletions.
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: CI

on:
push:
pull_request:

jobs:
tests:
name: Run tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
numpy-version: ["oldest-supported-numpy", "numpy"]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Python dependencies
run: python -m pip install --prefer-binary setuptools "cython>=0.28,<3.0" "matplotlib>=3,<4" ${{ matrix.numpy-version }}
- name: Build and install Raysect
run: dev/build.sh
- name: Run tests
run: dev/test.sh
18 changes: 0 additions & 18 deletions .travis.yml

This file was deleted.

34 changes: 0 additions & 34 deletions dev/build_wheels.sh

This file was deleted.

25 changes: 25 additions & 0 deletions dev/build_wheels_manylinux2010.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
# To be run from within manylinux2010 docker container.
# Run the command below from the root of the source folder:
# sudo docker run -ti -v $(pwd):/io quay.io/pypa/manylinux2010_x86_64 ./dev/build_wheels_manylinux2010.sh
# Or, to use singularity instead of docker (e.g. on HPC, or where root not available):
# singularity run -B $(pwd):/io -W /tmp -c docker://quay.io/pypa/manylinux2010_x86_64 /io/dev/build_wheels_manylinux2010.sh

set -e
cd /io || exit
VERSION=$(cat raysect/VERSION)
PLAT=manylinux2010_x86_64

# Numpy provides manylinux2010 wheels only for Python up to 3.9.

# python 3.7
/opt/python/cp37-cp37m/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp37-cp37m-linux_x86_64.whl --plat $PLAT

# python 3.8
/opt/python/cp38-cp38/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp38-cp38-linux_x86_64.whl --plat $PLAT

# python 3.9
/opt/python/cp39-cp39/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp39-cp39-linux_x86_64.whl --plat $PLAT
26 changes: 26 additions & 0 deletions dev/build_wheels_manylinux2014.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
# To be run from within manylinux2014 docker container.
# Run the command below from the root of the source folder:
# sudo docker run -ti -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 ./dev/build_wheels_manylinux2014.sh
# Or, to use singularity instead of docker (e.g. on HPC, or where root not available):
# singularity run -B $(pwd):/io -W /tmp -c docker://quay.io/pypa/manylinux2014_x86_64 /io/dev/build_wheels_manylinux2014.sh

set -e
cd /io || exit
VERSION=$(cat raysect/VERSION)
PLAT=manylinux2014_x86_64

# Numpy provides manylinux2010 wheels for Python up to 3.9. So only need manylinux2014
# wheels for 3.10 onwards

# python 3.10
/opt/python/cp310-cp310/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp310-cp310-linux_x86_64.whl --plat $PLAT

# python 3.11
/opt/python/cp311-cp311/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp311-cp311-linux_x86_64.whl --plat $PLAT

# python 3.12
/opt/python/cp312-cp312/bin/python -m build .
auditwheel repair dist/raysect-$VERSION-cp312-cp312-linux_x86_64.whl --plat $PLAT
23 changes: 19 additions & 4 deletions dev/notes/building_bdist_with_manylinux.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,29 @@ Start the manylinux docker container (this will download the container, mount th
This will drop you into the manylinux container terminal. The /opt/python folder in the container holds the various versions of python. This example targets python 3.7. Adjust the paths as appropriate to build bdists for different python versions.

cd io/source
/opt/python/cp37-cp37m/bin/python -m pip install cython numpy==1.14.6
/opt/python/cp37-cp37m/bin/python setup.py bdist_wheel
/opt/python/cp37-cp37m/bin/python -m pip build .
auditwheel repair dist/raysect-0.8.1-cp37-cp37m-linux_x86_64.whl --plat manylinux2010_x86_64

This will compile the wheel and repair any library references to produce the manylinux wheel files in a folder ./wheelhouse. e.g. raysect-0.8.1-cp37-cp37m-manylinux1_x86_64.whl and raysect-0.8.1-cp37-cp37m-manylinux2010_x86_64.whl.

These can then be uploaded to pypi (just the manylinux2010 packages for now).
These can then be uploaded to pypi.

For more info see:
https://realpython.com/python-wheels/#building-a-platform-wheel-macos-and-windows
https://uwekorn.com/2019/09/15/how-we-build-apache-arrows-manylinux-wheels.html
https://uwekorn.com/2019/09/15/how-we-build-apache-arrows-manylinux-wheels.html

Scripts to semi-automate the wheel building process
===================================================

There are two scripts which automate this for different versions of Python:
- dev/build_wheels_manylinux2010.sh builds manylinux2010 wheels for Python 3.7, 3.8 and 3.9
- dev/build_wheels_manylinux2014.sh builds manylinux2014 wheels for Python 3.10, 3.11 and 3.12

These can be used to produce wheels in a semi-automated fashion:
1. Install docker as above
2. Clone the raysect/source repository
3. Change into the top level of the raysect/source repository.
4. Run `sudo docker run -ti -v $(pwd):/io quay.io/pypa/manylinux2010_x86_64 /io/dev/build_wheels_manylinux2010.sh`
5. Run `sudo docker run -ti -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 /io/dev/build_wheels_manylinux2014.sh`
6. Upload the wheels in wheelhouse/, and the sdist in dist/, to PyPI using twine.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[build-system]
requires = ["setuptools>=42.0", "wheel", "oldest-supported-numpy", "cython>=0.28"]
requires = ["setuptools>=42.0", "wheel", "oldest-supported-numpy", "cython>=0.28,<3.0"]
build-backend = "setuptools.build_meta"
2 changes: 1 addition & 1 deletion raysect/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.8.1
0.8.1.post1
16 changes: 13 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from setuptools import setup, find_packages, Extension
from setuptools.command.build_ext import build_ext as _build_ext
import sys
import numpy
import os
Expand Down Expand Up @@ -83,6 +84,14 @@
with open(path.join(path.dirname(__file__), 'raysect/VERSION')) as version_file:
version = version_file.read().strip()

# Use multiple processes by default for building extensions
class build_ext(_build_ext):
def finalize_options(self):
super().finalize_options()
if self.parallel is None:
nproc = int(os.getenv("RAYSECT_BUILD_JOBS", str(multiprocessing.cpu_count())))
self.parallel = nproc

setup(
name="raysect",
version=version,
Expand All @@ -104,9 +113,10 @@
"Topic :: Multimedia :: Graphics :: 3D Rendering",
"Topic :: Scientific/Engineering :: Physics"
],
install_requires=['numpy>=0.14', 'matplotlib'],
install_requires=['numpy', 'matplotlib'],
packages=find_packages(),
include_package_data=True,
zip_safe=False,
ext_modules=extensions
zip_safe= False,
ext_modules=extensions,
cmdclass={"build_ext": build_ext},
)

0 comments on commit 20f5725

Please sign in to comment.