libpng.16.16.dylib en conflicto

1

En mi libro de mac (OS X 10.12.4) tengo dos libpng.16.16.dylib : uno en /opt/X11/bin , para el cual otool informa

/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)

y otro en Users/me/anaconda/lib con la instalación python de anaconda, para la cual otool informa

/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)

En mi script de inicio, configuré DYLD_LIBRARY_PATH para incluir /opt/X11/lib .

Ahora, cuando quiero import matplotlib de ipython3 (de la distribución de anaconda), recibo un error

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

Entonces, parece que dlopen intenta /opt/X11/lib/libpng.16.16.dylib en lugar de uno bajo anaconda .

¿Hay alguna forma de evitar esto sin cambiar DYLD_LIBRARY_PATH ? No recuerdo por qué configuré a DYLD_LIBRARY_PATH de esta manera, pero ¿cuál sería el efecto de omitir /opt/X11/lib ?

    
pregunta Walter 20.05.2017 - 18:23

1 respuesta

2

Puedo pensar en algunas maneras.

  • Copia de seguridad de su /opt/X11/lib/libpng.16.16.dylib . Y reemplace el archivo con un enlace simbólico al archivo debajo de anaconda o directamente pegue el archivo.
  • Creo que las variables de entorno pueden tener varias rutas, como la variable $ PATH. Descubrí que el camino que tienes enfrente tiene prioridad sobre los que están escritos detrás de él. Por ejemplo, si su ruta es /usr1/:/usr2/ , entonces debe verificar primero el directorio usr1 y ver si existe el archivo requerido, antes de pasar al segundo. Así que posiblemente podrías poner tu camino de anaconda frente al /opt/X11/lib/libpng.16.16.dylib .
  • Creo que simular el archivo es la mejor manera. He experimentado ese tipo de cosas antes, solo tuve que agregar un enlace simbólico y está arreglado.

Esta respuesta puede explicar su última pregunta.

    
respondido por el Thu Yein Tun 22.05.2017 - 06:40

Lea otras preguntas en las etiquetas