【发布时间】:2016-07-19 21:22:00
【问题描述】:
我正在尝试在 OSX El Capitan 10.11.5 上使用 IDL 8.5.1 中的新 IDL-Python 桥。自从它启动以来,我一直在 Windows 上使用此功能,效果很好,但在 OSX 上根本无法使用。
我已经安装了 Anaconda Python 3.4.1 64bit 进行测试。
按照here 所述设置环境后,其中涉及设置DYLD_LIBRARY_PATH 环境变量。
我可以从 Python 调用 IDL,但反过来不行。例如,如果我运行以下命令(来自示例 here),则会观察到以下错误:
IDL> ran = Python.Import('numpy.random')
% DLM_LOAD: Error loading sharable executable.
Symbol: IDL_Load, File = /Applications/exelis/idl85/bin/bin.darwin.x86_64/idl_python34.so
dlopen(/Applications/exelis/idl85/bin/bin.darwin.x86_64/idl_python34.so, 1): Library not loaded: libpython3.4m.dylib
Referenced from: /Applications/exelis/idl85/bin/bin.darwin.x86_64/idl_python34.so
Reason: image not found
% Execution halted at: $MAIN$
在与他们的技术支持合作后(我不得不说,他们非常乐于助人,而且他们的帮助质量很高)我们确定问题是由 OSX 中的新系统完整性保护 (SIP) 功能引起的。这个问题之前在stack上已经描述过了。
他们的建议是禁用 SIP,但我既没有得到雇主的许可,也不愿意关闭系统安全功能只是为了让一个商业软件工作。所以我被卡住了。
基本上,DYLD_LIBRARY_PATH 变量根本不会传递给 IDL 进程。启动 IDL 时,/Applications/exelis/idl85/bin/idl shell 脚本被执行,此时变量被剥离了我所做的任何修改,idl 脚本根本不知道我的更改。
那么我的问题是:有没有其他人找到另一种方法(除了禁用 SIP)来让 IDL-Python 桥接器工作?这里有其他选择吗?或者,在 Harris Geospatial 的优秀人员找到另一种实现此功能的方法之前,这将根本不起作用?
在我看来这是一个严重的设计问题,如果它需要在根级别修改系统来运行他们的软件。
【问题讨论】:
标签: python macos idl-programming-language