特定のシェル環境内でMATLABが使いたいです。

私は Parrot 社の ANAFI を操作するための計算ソフトとして MATLAB&Simulink を使用しています。
MathWorks のホームページを参考に通常の状態では Python と MATLAB を連携させることができたのですが、実際に ANAFI を飛行させるためのシェルスクリプト内では作成したプログラムを実行すると「ImportError: cannot import name 'matlab'」となってしまいます。
また、動かしている Linux の使用経験は浅いため MathWorks、Parrot のホームページを見てもいまいち分かりません。
使用しているバージョンは、R2020a (MATLAB)、Ubuntu 18.04 LTS、Python3.6 です。
どのようにすればこの問題を解決できますか。ご返答の方よろしくお願いします。

댓글 수: 4

Kojiro Saito
Kojiro Saito 2020년 10월 7일
モジュールのインポートに失敗しているようですね。ANAFIを飛行させるPythonスクリプトでどのようにインポートを書いていまでしょうか?循環依存関係になっているのかもしれません。
Kaito Okada
Kaito Okada 2020년 10월 8일
まず、ANAFI を飛行させるために必要な Python 環境をアクティブにしてから以下のような Python スクリプトを実行しています。
import matlab.engine
print("Start MATLAB")
eng = matlab.engine.connect_matlab()
print( eng.sqrt( 4.0 ) )
上のスクリプトを実行する前に MATLAB のコマンドラインで「matlab.engine.shareEngin」と入力してから実行しています。
※ ANAFI を飛行させるために必要な Python 環境でなければ実行できています。
Kojiro Saito
Kojiro Saito 2020년 10월 8일
Python環境をアクティブにするというのは具体的にどのように行っていますでしょうか?
また、Pythonスクリプトの実行は、ANAFIのPython環境からpython xxx.py のように実行しているのでしょうか?
Kaito Okada
Kaito Okada 2020년 10월 8일
Parrot 社のホームページ ( https://developer.parrot.com/docs/olympe/installation.html ) を参考にしてもらいのですが、ANAFI を操作するには
$ source ~/code/parrot-groundsdk/./products/olympe/linux/env/shell
というコマンドを実行し
(plympe-python3) $
という環境でないといけないという条件があります。
また、Python スクリプトの実行は質問にも書いてある通り「python xxx.py」とターミナルに入力し実行しています。

댓글을 달려면 로그인하십시오.

 채택된 답변

Kojiro Saito
Kojiro Saito 2020년 10월 19일
편집: Kojiro Saito 2020년 10월 27일

0 개 추천

ParrotのSDKで使用するPython Olympe環境で、標準Pythonの環境で入れたパッケージが見られていないようです。
の「Manual dependency installation」のワークアラウンドにあるように、Olympe側のsetenvにmatlabのパッケージが含むディレクトリを追加してみてはいかがでしょうか?
例えばmatlabパッケージが/usr/local/lib/python3.6/dist-packages/matlabにインストールされている場合、Ubuntuのターミナルで
export PYTHONPATH=/usr/local/lib/python3.6/dist-packages/
としてから
echo "export PYTHONPATH=\$PYTHONPATH:~/code/parrot-groundsdk/out/olympe-linux/final/usr/lib/python/site-packages/" >> ~/code/parrot-groundsdk/products/olympe/linux/env/setenv
とするとOlymeのPython環境にPYTHONPATHのディレクトリが追加されます。
UPDATE
別の方法としては、plympe-python3環境でsys.path.appendを使ってカスタムの検索パスを追加するやり方もあります。
ターミナルで(plympe-python3) $に切り替わった後、下記のコマンドを実行するか、Pythonスクリプトに追加することで/usr/local/lib/python3.6/dist-packagesにあるmatlabパッケージを呼び出せるようになります。
import sys
sys.path.append('/usr/local/lib/python3.6/dist-packages')
import matlab

댓글 수: 10

Toshiyuki Murao
Toshiyuki Murao 2020년 10월 20일
返信ありがとうございます。
まず matlab パッケージですが /usr/local/lib/python3.6/dist-packages/matlab にインストールされていたので、示してくれているコマンドを実行しましたがエラーとなってしまいました。
エラーは以下のように出力されています。
EnvironmentError: You do not have write permission in build/lib.linux-x86_64-2.7/matlab/engine/
年のため Olympe 環境でも試してみたのですがエラーとして
error: You do not have write permission in build/lib/matlab/engine/
が出力されています。
Kojiro Saito
Kojiro Saito 2020년 10월 20일
書き込みのパーミッションのエラーですが、echo "export PYTHONPATH..."で発生していますでしょうか?このエラーは通常setup.py installを実行するときに出るエラーだと思われますが。
Kaito Okada
Kaito Okada 2020년 10월 20일
エラーは発生していませんね...
そのことでお聞きしたいのですが、示してもらったコマンドを実行すると何かターミナルに処理をしている表示はされますか?
Kojiro Saito
Kojiro Saito 2020년 10월 20일
いえ、ターミナルには表示されません。export PYTHONPATHのところターミナルの環境変数を設定しているだけで、echo "export..."はその環境変数を設定するコマンドをホームディレクトリの~/code/parrot-groundsdk/products/olympe/linux/env/のsetenvファイルに追記しているだけですので。ターミナルには何も表示されないはずです。
Kaito Okada
Kaito Okada 2020년 10월 20일
何も表示されないとなると、コマンドを実行したところではエラーは発生していませんね。
Kojiro Saito
Kojiro Saito 2020년 10월 25일
エラーが起きていないなら環境変数PYTHONPATHの引き渡しはできているように思えます。
別の方法もあります。plympe-python3環境でsys.path.appendを使ってカスタムの検索パスを追加する方法です。「(plympe-python3) $ 」に切り替わった後、下記をお試しください。
import sys
sys.path.append('/usr/local/lib/python3.6/dist-packages')
import matlab
Kaito Okada
Kaito Okada 2020년 10월 27일
返信が遅くなり申し訳ありません。
教えていただいたコードを試したところ、無事に olympe-python3 環境で MATLAB を使うことができました。 本当にありがとうございます。
今後、この方法を採用しようと思っているのですが、この場合は実行する python スクリプトに上記の3行を追加すればよろしいのですか?
Kojiro Saito
Kojiro Saito 2020년 10월 27일
無事に解決できて良かったです。
はい、上記3行を実行するPythonスクリプトに追加すれば大丈夫です。
Kaito Okada
Kaito Okada 2020년 10월 27일
分かりました。ありがとうございました。
Kojiro Saito
Kojiro Saito 2020년 10월 27일
回答のほうもsys.path.appendを追加する方法を追加しておきました。よろしければ採用(Accept)ください。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 起動と終了에 대해 자세히 알아보기

질문:

2020년 10월 7일

댓글:

2020년 10월 27일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!