Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gobject-2.0-0 not able to load on macbook

I am facing this error when I start my flask python3 application on mac.

OSError: cannot load library 'gobject-2.0-0': dlopen(gobject-2.0-0, 2): image not found. Additionally, ctypes.util.find_library() did not manage to locate a library called 'gobject-2.0-0'

I am using weasyprint in my project which is causing this issue.

I tried to install glib and it is installed in my system

like image 272
Harmeet Singh Pable Avatar asked Sep 08 '21 04:09

Harmeet Singh Pable


Video Answer


4 Answers

I just managed the same issue on my Mac M1.

The problem was that symlinks to the libraries were not created (can't say should it be done by homebrew or weasyprint when installation).

So, I had to do it manually

sudo ln -s /opt/homebrew/opt/glib/lib/libgobject-2.0.0.dylib /usr/local/lib/gobject-2.0
sudo ln -s /opt/homebrew/opt/pango/lib/libpango-1.0.dylib /usr/local/lib/pango-1.0
sudo ln -s /opt/homebrew/opt/harfbuzz/lib/libharfbuzz.dylib /usr/local/lib/harfbuzz
sudo ln -s /opt/homebrew/opt/fontconfig/lib/libfontconfig.1.dylib /usr/local/lib/fontconfig-1
sudo ln -s /opt/homebrew/opt/pango/lib/libpangoft2-1.0.dylib /usr/local/lib/pangoft2-1.0

This solved the problem.

In order to TEST if Python can find the library you may run

from ctypes.util import find_library

find_library('gobject-2.0')  # Pass any other lib name as an argument

UPD. There is no such problem if you install python with homebrew.

like image 52
Mikhail Kravets Avatar answered Oct 23 '22 13:10

Mikhail Kravets


If you installed weasyprint package in your virtual env but did not installed some required packages for that, then that might be the reason. It was actually, in my case.

If you're mac user you need install pango and libffi, not to mention python as well.

Installation guide on mac

brew install python pango libffi
(venv) pip install weasyprint
like image 41
harryghgim Avatar answered Oct 23 '22 12:10

harryghgim


To expand on the existing answers on Apple Silicon (M1) Macs:

If you have installed the packages with Homebrew and they are still not found or linked under /usr/local/lib, it is because they are installed on arm64 and found in /opt/homebrew/lib instead.

If you're using Python installed with Homebrew it should work without any extra work, however system Python and any managed Python versions (e.g. installed with Pyenv) will require some configuration.

1. Manual symlinking

Instead of linking each library individually to /usr/local/lib, you can link the /opt/homebrew/lib contents (as long as you don't have an existing /usr/local/lib directory):

sudo ln -s /opt/homebrew/lib /usr/local/lib

This will work as long as the library you're looking for is not from a keg-only formula (those will have to be linked individually).

2. Environment variables

A lot of answers point to setting some environment variable, like LDFLAGS or DYLD_LIBRARY_PATH to add search paths for libraries, but these will not work with Python based on my testing:

macOS comes with System Integrity Protection (SIP) which, among other things, sanitizes your environment variables in subprocesses, for example Python. Anything starting with LD or DYLD will be purged, so setting the environment variables in your terminal profile will not work.

You can Disable SIP to get these working, but Apple recommends only doing it temporarily when needed.

If you decide to go this route, here are a few options:

In Homebrew's Github discussions the question was answered by setting LDFLAGS:

export LDFLAGS=-L/opt/homebrew/lib

Similarly you could add the necessary paths to DYLD_LIBRARY_PATH

export DYLD_LIBRARY_PATH=/opt/homebrew/lib
like image 4
Mika Kuitunen Avatar answered Oct 23 '22 14:10

Mika Kuitunen


I had the same issue after the homebrew update. Turned out the issue was because of the older pango lib version.

I did brew install pango

This upgraded pango lib from 1.48.2 -> 1.50.4 which internally installed gobject's latest version as dep. And my issue got resolved.

like image 1
Scorpionk Avatar answered Oct 23 '22 13:10

Scorpionk