2016-07-19 4 views
0

OSX El Capitan 10.11.5のIDL 8.5.1で新しいIDL-Pythonブリッジを利用しようとしています。私はWindows上でこの機能を使用しました。これは、起動してから美しく機能しますが、OSXでは機能しません。IDL-PythonブリッジがOSX El Capitan上のSIPのために失敗する

私はテストするためにAnaconda Python 3.4.1 64bitをインストールしました。

hereのように環境を設定したら、DYLD_LIBRARY_PATH環境変数を設定します。

私はPythonからIDLを呼び出すことができますが、それ以外の方法はありません。彼らの技術サポートの作業が終了した後

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$ 

を(と私は、彼らは非常に有用と彼らの助けとなっていると言っている:私は(例hereから)次のコマンドを実行した場合、次のエラーが観察されます高品質であることが確認されています)、OSXの新しいシステムインテグリティ保護(SIP)機能によって問題が発生していると判断しました。この問題は前にstackに記載されています。

彼らの提案はSIPを無効にすることでしたが、私は雇用者の許可を得ていないし、市販のソフトウェアを稼働させるためにシステムセキュリティ機能をオフにする意思もない。だから私は立ち往生している。

本質的に、DYLD_LIBRARY_PATH変数は単にIDLプロセスに渡されません。 IDLを起動すると、/Applications/exelis/idl85/bin/idlシェルスクリプトが実行され、その時点で変数が削除されます。idlスクリプトは自分の変更を認識しません。

私の質問は次のとおりです。他の誰かがIDL-Pythonブリッジを動作させるために(SIPを無効にする以外に)別の方法を見つけましたか?ここには何か別の選択肢がありますか?あるいは、Harris Geospatialの良い人たちがこの機能を実装する別の方法を見つけるまで、これは単純に機能しませんか?

ソフトウェアを実行するためにルートレベルでシステムを変更する必要がある場合は、私の意見では深刻な設計上の問題です。

答えて

1

現在、私たちは現在、エル・キャピタンでIDL-Pythonブリッジがより簡単に機能するよう取り組んでいます。その間に、あなたがそれを働かせるために取ることができるステップはここにあります。 まず、パスが正しく設定されていることを確認してください。たとえば、.loginファイルに(.cshrcをしない):あなたはこのコマンドを使用することができます

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 

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のブリッジのために、次のコマンドを実行します検証:Pythonの対IDLブリッジの

otool -L idl_python34.so 

を(これらの一部を上方から重複している):

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 

IDLのbinディレクトリを指定するには、この時点で.loginにDYLD_LIBRARY_PATHが必要です。それを解消するには、次の更新プログラムは、その依存関係を検索する場所をさまざまなライブラリを伝えるようにすることができる。

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

ちょっと@クリス・トーレンス。私はこの機能の大ファンだと言わなければならない。これは、LinuxやWindowsでうまく動作します。 Macがこの問題の唯一のプラットフォームだと思われる。私は最新のIDL 8.6でこれを試しましたが、設定ははるかに簡単ですが、sudo特権と同じ要件があります。今は、Linux VMでテストしているだけです。 – spacemanjosh

関連する問題