Skip to content

Commit

Permalink
fix library-loading issues in editable installs (#1484)
Browse files Browse the repository at this point in the history
Contributes to rapidsai/build-planning#118

The pattern introduced in #1483 breaks editable installs in devcontainers. In that type of build, `libcuspatial.so` is built outside of the wheel but **not installed**, so it can't be found by `ld`. Extension modules in `cuspatial` are able to find it via RPATHs instead.

This proposes:

* try-catching the entire library-loading attempt, to silently do nothing in cases like that
* ~adding an import of the `cuspatial` Python library in the `devcontainers` CI job, as a smoke test to catch issues like this in the future~ *(edit: removed those, [`devcontainer` builds run on CPU nodes](https://github.com/rapidsai/shared-workflows/blob/4e84062f333ce5649bc65029d3979569e2d0a045/.github/workflows/build-in-devcontainer.yaml#L19))*

## Notes for Reviewers

### How I tested this

Tested this approach on rapidsai/kvikio#553

#

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Bradley Dice (https://github.com/bdice)

URL: #1484
  • Loading branch information
jameslamb authored Nov 15, 2024
1 parent 20abaaa commit 0a79456
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions python/libcuspatial/libcuspatial/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,17 @@ def load_library():
# Prefer the libraries bundled in this package. If they aren't found
# (which might be the case in builds where the library was prebuilt
# before packaging the wheel), look for a system installation.
libcuspatial_lib = _load_wheel_installation(soname)
if libcuspatial_lib is None:
libcuspatial_lib = _load_system_installation(soname)
try:
libcuspatial_lib = _load_wheel_installation(soname)
if libcuspatial_lib is None:
libcuspatial_lib = _load_system_installation(soname)
except OSError:
# If none of the searches above succeed, just silently return None
# and rely on other mechanisms (like RPATHs on other DSOs) to
# help the loader find the library.
pass

# The caller almost never needs to do anything with this library, but no
# harm in offering the option since this object at least provides a handle
# to inspect where the libcuspatial was loaded from.
# to inspect where libcuspatial was loaded from.
return libcuspatial_lib

0 comments on commit 0a79456

Please sign in to comment.