pyfluidsynth icon indicating copy to clipboard operation
pyfluidsynth copied to clipboard

raise ImportError, "Couldn't find the FluidSynth library." on M1 Macbook

Open windfall-s opened this issue 3 years ago • 3 comments

I use MacOS 12.3 (Monterey) on MacBook Pro (14-inch, 2021).

I installed fluidsynth by brew install fluidsynth, but my fluidsynth.py returned

  File "/Users/<myusername>/.pyenv/versions/<myPyenvName>/lib/python3.9/site-packages/fluidsynth.py", line 44, in <module>
    raise ImportError("Couldn't find the FluidSynth library.")
ImportError: Couldn't find the FluidSynth library.

When I ran import fluidsynth.

I tried adding /opt/homebrew/Cellar/fluid-synth/2.2.8_1/lib dir in my $PATH (the directory contains libfluidsynth.3.dylib), but the error message persisted.

Interestingly, when I import fluidsynth on my non-M1 macbook, the code worked as is.

Does anyone have an idea on what is wrong in my setting?

windfall-s avatar Aug 20 '22 22:08 windfall-s

I managed to resolve it.

The ctypes.util.find_library() call in fluidsynth.py calls an underlying method dyld_find(), which didn't check opt/homebrew/Celler/ subdirectories.

print()ing all the paths revealed /Users/<myUserName>/lib/ is one of the search directory, and adding a symlink of libfluidsynth.dylib resolved.

ln -s /opt/homebrew/Cellar/fluid-synth/2.2.8_1/lib/libfluidsynth.dylib /Users/<myUserName>/lib/libfluidsynth.dylib

Although this is not at all a clean solution, it at least worked

windfall-s avatar Aug 20 '22 22:08 windfall-s

Similarly, I downloaded pyfluidsynth using pip in miniconda3 and was able to resolve this issue by adding a symlink to my miniconda3 directory (which has a very similar architecture to homebrew, thankfully).

ln -s /opt/homebrew/Cellar/fluid-synth/2.3.0/lib/libfluidsynth.dylib /Users/<myUserName>/miniconda3/lib/libfluidsynth.dylib

I also did the same for the cmake files, pkgconfig, include, bin, and share to make everything accessible to miniconda. It's not necessary though.

davidgraymi avatar Dec 16 '22 05:12 davidgraymi

For me, it was enough to add the folder with libfluidsynth.dylib into the DYLIB_LIBRARY_PATH environmental variable.

In my case specifically, this meant adding the following line into my ~/.zshrc:

export DYLD_LIBRARY_PATH="/opt/homebrew/Cellar/fluid-synth/2.3.1_1/lib/:$DYLD_LIBRARY_PATH"

Thank you for the other answers though, they pointed me in the right direction to solve this 🙇

DahnJ avatar Mar 25 '23 20:03 DahnJ

This should work on Apple Silicon ARM.

export DYLD_LIBRARY_PATH="$(brew --prefix fluid-synth)/lib/:$DYLD_LIBRARY_PATH"

In our GitHub Action, I needed to https://github.com/nwhitehead/pyfluidsynth/blob/818912d41a37a151043c20ec52c98fc95137c58f/.github/workflows/ci.yml#L26

And also get the change merged in:

  • #58

@windfall-s Can this issue be closed?

cclauss avatar Apr 21 '24 10:04 cclauss

@nwhitehead I think this can be closed.

Everyone above was able to get it to work and the solution is documented in our GitHub Actions.

cclauss avatar Apr 29 '24 05:04 cclauss