2016-07-19 79 views
0

我試圖利用在OSX埃爾卡皮坦10.11.5在IDL 8.5.1新的IDL-Python的橋樑。自啓動以來,我在Windows上使用了該功能,這種功能非常好用,但它在OSX上無法正常工作。IDL的Python橋出現故障,由於SIP在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腳本根本不知道我的更改。

我的問題的話,是這樣的:有沒有其他人發現了一種替代的方式獲得IDL的Python橋工作(除禁用SIP等)?這裏有沒有其他的選擇?或者,只有在哈里斯地理空間的好人找到另一種實現此功能的方式之後,這種方法纔會起作用。

這在我看來是一個嚴重的設計問題,是否需要在根級別修改系統剛剛運行他們的軟件。

回答

1

好吧,我們目前正在研究如何更輕鬆地獲得IDL-Python的橋樑,在埃爾卡皮坦工作。與此同時,以下是您可以採取的步驟來實現它的工作。 首先,確保你的路徑設置正確。例如,在.login文件(不.cshrc)中:

setenv PATH /Users/username/anaconda/bin:${PATH} 
setenv PYTHONHOME /Users/username/anaconda 
setenv PYTHONPATH /Users/username/Applications/exelis/idl/bin/bin.darwin.x86_64 
setenv PYTHONPATH ${PYTHONPATH}:/Users/username/Applications/exelis/idl85/lib/bridges 

然後,對於IDL到Python的橋樑,運行以下命令:

cd Applications/exelis/idl85/bin/bin.darwin.x86_64/ 
sudo install_name_tool -change libpython3.4m.dylib /Users/username/anaconda/lib/libpython3.4m.dylib idl_python34.so 

您可以使用此命令驗證:

otool -L idl_python34.so 

對於Python的到IDL橋(其中的一些是由上述重複):

cd Applications/exelis/idl85/bin/bin.darwin.x86_64/ 
sudo install_name_tool -change libidl.8.5.dylib @loader_path/libidl.8.5.dylib pythonidl34.so 
sudo install_name_tool -change libidl_ips.8.5.dylib @loader_path/libidl_ips.8.5.dylib pythonidl34.so 
sudo install_name_tool -change libpython3.4m.dylib /Users/username/anaconda/lib/libpython3.4m.dylib pythonidl34.so 

此時,.login中仍然需要DYLD_LIBRARY_PATH來指定IDL的bin目錄。要消除的是,以下更新可製成各種訴說圖書館在哪裏可以找到他們的依賴:

sudo install_name_tool -change libMesaGL6_2.dylib @loader_path/libMesaGL6_2.dylib libidl.8.5.dylib 
sudo install_name_tool -change libMesaGLU6_2.dylib @loader_path/libMesaGLU6_2.dylib libidl.8.5.dylib 
sudo install_name_tool -change libOSMesa6_2.dylib @loader_path/libOSMesa6_2.dylib libidl.8.5.dylib 
sudo install_name_tool -change libXm.3.0.2.dylib @loader_path/libXm.3.0.2.dylib libidl.8.5.dylib 
sudo install_name_tool -change libMesaGL6_2.dylib @loader_path/libMesaGL6_2.dylib libMesaGLU6_2.dylib 
sudo install_name_tool -change libMesaGL6_2.dylib @loader_path/libMesaGL6_2.dylib libOSMesa6_2.dylib 
sudo install_name_tool -change libidl.8.5.dylib @loader_path/libidl.8.5.dylib libidl_ips.8.5.dylib 

希望這有助於!

+0

謝謝克里斯我真的很感謝幫助。我無法嘗試上面列出的步驟,因爲在我目前的僱主中,用戶(包括我自己)沒有sudo權限。 – spacemanjosh

+0

嗨@spacemanjosh,嘗試沒有「sudo」的命令。如果您在自己的應用程序文件夾中安裝了IDL,那麼它就會正常工作。如果沒有「sudo」,它不起作用,您將需要管理員執行此操作。 –

+0

嘿@ chris-torrence。我應該說,我是這個功能的忠實粉絲。它在linux和windows上運行得非常好。 Mac似乎是這個問題唯一的平臺。我已經用最新的IDL 8.6試過了,而且安裝起來要容易得多,但是,對sudo權限的要求相同。現在我只是在linux虛擬機中測試才能完成任務。 – spacemanjosh

相關問題