Android StudioでPython実行しようと思ったら理解不足だった件
前回の、取り組みはじめの段階はこちら
続く今回、カンタンな処理を実行しようとしたら動かなくて、
やっぱりちゃんと理解しないとダメだな?と気づいたお話。
前回、build.grade(app)の、
defaultConfig{ }内に追加したコード
python {
pip {
//Pythonのライブラリをインストールする。
install "numpy"
}
}
前回のままでは通らないんですよね。。
そもそも"numpy"ってどこの何なんだ?とか、
理解不足なので一旦、コメントアウトします。
python {
pip {
//Pythonのライブラリをインストールする。
//install "numpy"
}
}
これでアプリは起動できるようになって、
ちょっと何か処理を実行しようと、
MainActivity内に下のような処理を書いてみると、
//Pythonのインスタンスを取得
Python py = Python.getInstance();
PyObject pyobj = null;
//Pythonのモジュールを取得
pyobj = py.getModule("hello");
始めのインスタンス取得の段階で落ちます。
(前回からの流れのままだと落ちます)
//Pythonのインスタンスを取得
Python py = Python.getInstance();
これを解決するためにはマニュフェストの、
<application 内に下のコードを追加する必要があります。
android:name="com.chaquo.python.android.PyApplication"
すると、インスタンス取得できますが、
次の、モジュール取得でまた落ちます。
//Pythonのモジュールを取得
pyobj = py.getModule("hello");
そこで流石に、バカなりに気づきました。
"hello"って、そんなモジュールないでしょ?
という状況に、
そうなるとバカなエンジニアは、
次に何を考えるのか?と言うと、
こんな風に、
エラーメッセージを読んでみたり、
GitHub Copilotさんに質問したりしました。
(//Q: //A:が、Copilotさんとのやり取り)
try {
//Q:py.getModule("hello")の引数は何を指定すればいいのか?
//A:Pythonのファイル名を指定する
//Q:Pythonのファイルとは?
//A:app/src/main/python/にあるファイル
pyobj = py.getModule("hello");
}catch (PyException e) {
String s = e.toString();
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}
}
はい。
やっと少し理解が進みました。
そうなんです。
自分のプロジェクトファイル内の
” app/src/main/python/ ”フォルダ内に、
Python関数として処理が存在しないだけなんです。
下の画像のような感じで、
所定の場所にファイルを追加すると、
モジュールとして存在する状態になり、
//Pythonのモジュールを取得
pyobj = py.getModule("hello");
あとは該当するファイル内に、
Pythonの関数として書かれていればOK。
そして、ここまでくると、
冒頭のライブラリの件も分ってきます。
そのライブラリはどこの何なのか?
そこを確認できると解決しそうです。
ということで、
今回は進展がありませんが、
ちゃんと理解しないとダメ。
という当たり前のお話でした。
次回こそは、
カンタンな処理を書いて実行するところを紹介します。
-この記事は、アプリ開発経験はあるけどPython未経験という非ITエンジニアが、Android Studio環境でPythonプログラミングを始めるためのステップを紹介します。書き手自身の経験や学びから、Android Studioの具体例を交えて紹介します。
この記事が気に入ったらサポートをしてみませんか?