Вот что у меня есть:Альтернатива для DYLD_LIBRARY_PATH-трик, поскольку Mac OS 10.11 El Capitan с системой защиты целостности
- Mac OS 10.11 El Capitan
- питон 2.7.12, установленная из питона. орг под
/Library/Frameworks/Python.framework/
- PyCharm 2016.2.3
- ВТК 7.1.0
Вот что я делаю:
Построить модуль питона локально. В моем случае это vtk. Для получения сводки см. Вызов CMake, с которым я настраиваю 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"
Установите пакет python в место, где python может его найти. В моем случае это
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Обратите внимание, что мне необходимо расширитьDYLD_LIBRARY_PATH
по месту нахождения библиотек:/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/
.Если я запускаю python с терминала, я могу успешно импортировать vtk.
import vtk v = vtk.vtkVersion() print v.GetVTKVersion()
Если я пытаюсь импортировать VTK в питона консоли PyCharm, я получаю следующее сообщение об ошибке:
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
К настоящему времени, я понимаю, что проблема вызвана System Integrity Protection (SIP), который был введен в El Capitan. Одним из эффектов является то, что дочерние процессы имеют только restricted access для других ресурсов, и, скорее всего, PyCharm выполняет python как отдельный процесс.
Я также понимаю, что python не может импортировать vtk, потому что он не может найти dylib, с которым связан модуль python. Я могу проверить это двумя способами:
DYLD_LIBRARY_PATH
пуст. Это связано с тем, что python работает как дочерний процесс в PyCharm:os.getenv('DYLD_LIBRARY_PATH')
возвращаетNone
.- Когда я скопировать все библиотеки из
/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/
текущего рабочего каталога, я могу импортировать модуль
Теперь вопрос: По-видимому, DYLD_LIBRARY_PATH
не могут быть использованы в детей-процессов и, следовательно, не должны использоваться больше от El Capitan. Итак, как правильно заменить этот «взлом сцепления», который отлично работал перед MacOS 10.11.? Есть ли способ использовать DYLD_LIBRARY_PATH
?
Отключение SIP не является вариантом. По-видимому, он помогает копировать dylib в текущий рабочий каталог, но для меня это невозможно. Однако размещение libs в местоположении сайта (vtk) не помогает.
Я уверен, что многие люди полагаются на DYLD_LIBRARY_PATH
-hack и теперь борются с последствиями SIP - вот почему я думал, что сообщество может извлечь выгоду из этого довольно продолжительного вопроса.
Похожие посты на пользователя ВТК рассылки, которая также может представлять интерес: [(Post 1)] (http://vtk.1045678.n5.nabble.com/How-to-build-and-install- the-python-wrapper-правильно-на-rootless-MacOS-10-11-td5740708.html) и [(сообщение 2)] (http://vtk.1045678.n5.nabble.com/VTK-and-Python- on-OS-X-El-Capitan-td5734265.html) – normanius
Прочитайте, возможно, также [this] (https://stackoverflow.com/a/47699417/3388962) иллюминативный ответ, связанный с этой темой. – normanius