La protección de integridad del sistema rompe DYLD_LIBRARY_PATH para los scripts de Python

2

Tengo algunos módulos personalizados que se generan utilizando SWIG que se instalan en una ruta local, por ejemplo:

catkin_ws/devel/lib/python2.7/site-packages

Cuando intento ejecutar una secuencia de comandos de Python que utiliza uno de estos módulos, aparece un error de importación:

"/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named _mag_manip

Descubrí que esto se debe al shebang en la parte superior de la secuencia de comandos de python:

#!/usr/bin/env python

Debido a que / usr / bin / env está protegido por la Protección de integridad del sistema (SIP), la variable de entorno DYLD_LIBRARY_PATH no se carga y no se pueden encontrar algunos módulos. Una solución es reemplazar el shebang con la ruta codificada de python, es decir:

#!/usr/local/bin/python

Dado que mi código se ejecuta en Linux y Mac OSX, reemplazar la Pyebon Shebang normal por una ruta codificada en Mac no es una solución realmente buena. ¿Alguien sabe cuál es la mejor solución aquí?

    
pregunta user3293204 09.06.2017 - 12:32

1 respuesta

1

Nota: esto solo funciona en el shell Z (zsh).

Aunque normalmente diría que es una mala idea, no veo nada malo en hacer esto con env, que es un comando bastante inofensivo. Intente copiar env en / usr / local / bin y reemplazar /usr/bin/env python en el shebang con solo env python (sin la ruta absoluta). Suponiendo que tenga / usr / local / bin en algún lugar cerca del comienzo de su variable PATH en OS X, recogerá la reubicada, que ya no estará cubierta por SIP. Ese shebang también funcionará en Linux.

    
respondido por el William T Froggard 09.06.2017 - 13:27

Lea otras preguntas en las etiquetas