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

Community Treasure Hunt

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

Start Hunting!