Суперечливий libpng.16.16.dylib


1

У моїй mac-книзі (OS X 10.12.4) у мене є дві libpng.16.16.dylib: одна в /opt/X11/bin, для якої otoolзвіти

/opt/X11/lib/libpng16.16.dylib:
    /opt/X11/lib/libpng16.16.dylib (compatibility version 43.0.0, current version 43.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

та інший Users/me/anaconda/libз встановленням python анаконди, про який otoolповідомляє

/Users/me/anaconda/lib/libpng16.16.dylib:
    @rpath/libpng16.16.dylib (compatibility version 44.0.0, current version 44.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

У своєму стартовому сценарії я налаштував DYLD_LIBRARY_PATHвключити /opt/X11/lib.

Тепер, коли я хочу import matplotlibвід ipython3(розподілів анаконди), я отримую повідомлення про помилку

ImportError: dlopen(/Users/walter1/anaconda/lib/python3.6/site-packages/matplotlib/_png.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libpng16.16.dylib
  Referenced from: /Users/walter1/anaconda/lib/python3.6/site-packages/matplotlib/_png.cpython-36m-darwin.so
  Reason: Incompatible library version: _png.cpython-36m-darwin.so requires version 44.0.0 or later, but libpng16.16.dylib provides version 43.0.0

Тож виявляється, що dlopenнамагається /opt/X11/lib/libpng.16.16.dylibскоріше, ніж той, хто під anaconda.

Чи є спосіб уникнути цього без змін DYLD_LIBRARY_PATH? Я не можу пригадати, чому я ставив DYLD_LIBRARY_PATHце так, але який би ефект був від цього пропускати /opt/X11/lib?

Відповіді:


1

Я можу придумати деякі способи.

  • Резервне копіювання вашого /opt/X11/lib/libpng.16.16.dylib. І замініть файл символьним посиланням на файл під анакондою або безпосередньо вставте файл.
  • Я думаю, що змінні середовища можуть мати декілька шляхів, наприклад, змінну $ PATH. Я виявив, що шлях, який ви маєте попереду, має перевагу над тими, які написані за ним. Наприклад, якщо ваш шлях, /usr1/:/usr2/то слід usr1спочатку перевірити каталог і перевірити, чи потрібний файл існує, перш ніж перейти до другого. Таким чином, ви могли б поставити ваш анаконда шлях перед /opt/X11/lib/libpng.16.16.dylib.
  • Я вважаю, що поєднання файлу - найкращий спосіб. Я випробував подібні речі раніше, мені просто довелося додати симпосилання і це виправлено.

Ця відповідь може пояснити ваше останнє запитання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.