Alternativa para el truco DYLD_LIBRARY_PATH desde Mac OS 10.11 El Capitan con System Integrity Protection

Esto es lo que tengo:

Mac OS 10.11 El Capitanpython 2.7.12, instalado desde python.org bajo/Library/Frameworks/Python.framework/PyCharm 2016.2.3vtk 7.1.0

Esto es lo que hago:

Construye un módulo de Python localmente. En mi caso, esto esvtk. Para obtener un resumen, consulte la llamada CMake con la que configuro vtk.

cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"

Instale el paquete python en una ubicación donde python pueda encontrarlo. En mi caso, esto es/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages Tenga en cuenta que estoy obligado a extender elDYLD_LIBRARY_PATH por la ubicación donde residen las librerías:/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/.

Si inicio Python desde la terminal, puedo importar vtk con éxito.

import vtk
v = vtk.vtkVersion()
print v.GetVTKVersion()

Si intento importar vtk en la consola de Python de PyCharm, aparece el siguiente error:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-b7e11aadda62>", line 1, in <module>
    import vtk
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vtk/__init__.py", line 41, in <module>
    from .vtkCommonCore import *
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vtk/vtkCommonCore.py", line 9, in <module>
    from vtkCommonCorePython import *
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ImportError: No module named vtkCommonCorePython

Por ahora, entiendo que el problema es causado por elProtección de integridad del sistema (SIP) que se ha introducido en El Capitan. Uno de los efectos es que los procesos secundarios solo tienenacceso restringido a otros recursos, y muy probablemente, PyCharm ejecuta Python como un proceso separado.

También entiendo que python no puede importar vtk porque no puede encontrar los dylibs a los que se vincula el módulo python. Puedo verificar esto de dos maneras:

losDYLD_LIBRARY_PATH esta vacio. Esto se debe a que Python se ejecuta como un proceso secundario en PyCharm:os.getenv('DYLD_LIBRARY_PATH') devolucionesNone.Cuando copio todas las bibliotecas de/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/ al directorio de trabajo actual, puedo importar el módulo

Ahora la pregunta: AparentementeDYLD_LIBRARY_PATH no se puede usar en procesos secundarios y, por lo tanto, no se debe usar más desde El Capitán. Entonces, ¿cómo reemplazar adecuadamente este "hack de enlace" que funcionó perfectamente bien antes de MacOS 10.11.? ¿Hay alguna manera de seguir usandoDYLD_LIBRARY_PATH?

Deshabilitar SIP no es una opción. Aparentemente, ayuda copiar los dylibs en el directorio de trabajo actual, pero esto no es factible para mí. Sin embargo, colocar las bibliotecas en la ubicación del paquete del sitio (de vtk) no ayuda.

Estoy bastante seguro de que muchas personas han estado confiando enDYLD_LIBRARY_PATH-hack y ahora lucha con las consecuencias de SIP - por eso pensé que la comunidad podría beneficiarse de esta pregunta bastante larga.

Respuestas a la pregunta(1)

Su respuesta a la pregunta