abdeladim-s / pywhispercpp

Python bindings for whisper.cpp
https://abdeladim-s.github.io/pywhispercpp/
MIT License
180 stars 26 forks source link

Fix repairwheel on linux #81

Closed PiotrCzapla closed 2 weeks ago

PiotrCzapla commented 2 weeks ago

The package was failing on unbuntu because of the change I've made to support editable mode, so I've made the change conditional and run only when pip install -e . is executed.

This showed another issue though. On linux our wheels contains the libwhipser.so twice, and one is redundant, we should fix that, I will create a new pull request once I figure out how.

To give you more info setting rpath to $ORIGIN, breaks the wheels after repair step because the dependencies aren't copied to pywhispercpp.libs and rpath is corrected to $ORIGN/pywhipsercpp.libs.

This is how the readelf of _pywhispercpp.cpython-312-aarch64-linux-gnu.so looks like on linux for a working wheel:

  0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/pywhispercpp.libs]
 0x0000000000000001 (NEEDED)             Shared library: [libwhisper-40042964.so.1.7.1]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++-3f0d3c8a.so.6.0.33]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s-1a8c3655.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc-07406008.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [ld-linux-aarch64.so.1]

On a broken wheel the libwhisper is not copied to pywhispercpp.libs, and stays as [libwhisper.so.1] here is the output:

  0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/pywhispercpp.libs]
 0x0000000000000001 (NEEDED)             Shared library: [libwhisper.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++-3f0d3c8a.so.6.0.33]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s-1a8c3655.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc-07406008.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [ld-linux-aarch64.so.1]

This was build on ubuntu and the libc* where for some reason included in the wheel, I hope it won't happen when build on manylinux image.

abdeladim-s commented 2 weeks ago

Yeah, that makes sense. The libwhipser.so is included now and all tests have passed. I checked some of the resulting wheels and they do not contain any libc files, which is the good. So I will merge this for now. But as you said we still need to figure out how to delete the included shared library from the top folder of the wheel.