System Integrity Protection interrompe DYLD_LIBRARY_PATH per gli script Python

2

Ho alcuni moduli personalizzati che vengono generati utilizzando SWIG installati in un percorso locale, ad esempio:

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

Quando provo a eseguire uno script python che utilizza uno di questi moduli, ottengo un errore di importazione:

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

Ho capito che questo è dovuto allo shebang nella parte superiore dello script python:

#!/usr/bin/env python

Poiché / usr / bin / env è protetto da System Integrity Protection (SIP), la variabile di ambiente DYLD_LIBRARY_PATH non viene caricata e alcuni moduli non possono essere trovati. Una soluzione è sostituire lo shebang con il percorso hard di Python, ad esempio:

#!/usr/local/bin/python

Poiché il mio codice funziona su Linux e Mac OSX, sostituire la normale shebang Python con un percorso hardcoded su mac non è una soluzione davvero buona. Qualcuno sa qual è la soluzione migliore qui?

    
posta user3293204 09.06.2017 - 12:32
fonte

1 risposta

1

Nota: funziona solo nella shell Z (zsh).

Anche se normalmente direi che questa è una cattiva idea, non riesco a vedere niente di sbagliato nel fare ciò con env, che è un comando piuttosto innocuo. Prova a copiare env in / usr / local / bin e sostituendo /usr/bin/env python nello shebang con solo env python (senza il percorso assoluto). Supponendo che tu abbia / usr / local / bin da qualche parte vicino all'inizio della tua variabile PATH su OS X, prenderà quello trasferito, che non sarà più coperto da SIP. Che shebang funzionerà anche su Linux.

    
risposta data 09.06.2017 - 13:27
fonte

Leggi altre domande sui tag