特定のシェル環境内で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 Comments

Kojiro Saito
Kojiro Saito on 7 Oct 2020
モジュールのインポートに失敗しているようですね。ANAFIを飛行させるPythonスクリプトでどのようにインポートを書いていまでしょうか?循環依存関係になっているのかもしれません。
まず、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 on 8 Oct 2020
Python環境をアクティブにするというのは具体的にどのように行っていますでしょうか?
また、Pythonスクリプトの実行は、ANAFIのPython環境からpython xxx.py のように実行しているのでしょうか?
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」とターミナルに入力し実行しています。

Sign in to comment.

 Accepted Answer

Kojiro Saito
Kojiro Saito on 19 Oct 2020
Edited: Kojiro Saito on 27 Oct 2020

0 votes

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 Comments

返信ありがとうございます。
まず 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 on 20 Oct 2020
書き込みのパーミッションのエラーですが、echo "export PYTHONPATH..."で発生していますでしょうか?このエラーは通常setup.py installを実行するときに出るエラーだと思われますが。
Kaito Okada
Kaito Okada on 20 Oct 2020
エラーは発生していませんね...
そのことでお聞きしたいのですが、示してもらったコマンドを実行すると何かターミナルに処理をしている表示はされますか?
Kojiro Saito
Kojiro Saito on 20 Oct 2020
いえ、ターミナルには表示されません。export PYTHONPATHのところターミナルの環境変数を設定しているだけで、echo "export..."はその環境変数を設定するコマンドをホームディレクトリの~/code/parrot-groundsdk/products/olympe/linux/env/のsetenvファイルに追記しているだけですので。ターミナルには何も表示されないはずです。
Kaito Okada
Kaito Okada on 20 Oct 2020
何も表示されないとなると、コマンドを実行したところではエラーは発生していませんね。
エラーが起きていないなら環境変数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 on 27 Oct 2020
返信が遅くなり申し訳ありません。
教えていただいたコードを試したところ、無事に olympe-python3 環境で MATLAB を使うことができました。 本当にありがとうございます。
今後、この方法を採用しようと思っているのですが、この場合は実行する python スクリプトに上記の3行を追加すればよろしいのですか?
Kojiro Saito
Kojiro Saito on 27 Oct 2020
無事に解決できて良かったです。
はい、上記3行を実行するPythonスクリプトに追加すれば大丈夫です。
Kaito Okada
Kaito Okada on 27 Oct 2020
分かりました。ありがとうございました。
Kojiro Saito
Kojiro Saito on 27 Oct 2020
回答のほうもsys.path.appendを追加する方法を追加しておきました。よろしければ採用(Accept)ください。

Sign in to comment.

More Answers (0)

Categories

Find more on 起動と終了 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!