我试图在OSX elcapitan 10.11.5上利用idl8.5.1中的新IDL Python桥。自从Windows发布以来,我就在Windows上使用了这个功能,它运行得很好,但它在OSX上根本不起作用。在
我已经安装了AnacondaPython3.4.164bit进行测试。在
在按照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
脚本根本不知道我所做的更改。在
那么,我的问题是:有没有其他人找到了让IDL Python桥正常工作的替代方法(而不是禁用SIP)?这里有其他选择吗?或者,在Harris Geospatial的优秀员工找到另一种实现这一功能的方法之前,这种方法是不会奏效的?在
在我看来,这是一个严重的设计问题,如果它需要在根级别修改系统来运行他们的软件。在
好的,我们目前正在研究如何更容易地让IDL Python桥在El Capitan上工作。同时,这里有一些你可以采取的步骤来让它发挥作用。 首先,确保你的路径设置正确。例如,在.login文件(而不是.cshrc)中:
然后,对于IDL到Python桥,运行以下命令:
^{pr2}$可以使用此命令验证:
对于Python到IDL的网桥(其中一些是从上面复制的):
此时,.login中仍然需要DYLD_LIBRARY_路径来指定IDL的bin目录。为了消除这种情况,可以进行以下更新,以告诉各种库在哪里可以找到它们的依赖项:
希望这有帮助!在
相关问题 更多 >
编程相关推荐