Python
マルチプラットフォーム
Kivy

kiviのビルドと実行に関する調査

More than 1 year has passed since last update.

前回、ビルド出来た!と思っていた。
しかし、ビルドができていただけで動くアプリになっていませんでした。

そこで色々調査して回ったので、まとめておこうと思います。

調査結果などからわかったこと

本当の意味でのマルチプラットフォームじゃない、ということがわかりました。
Mac一つあれば、WindowsもMacもLinuxも使えるアプリが作れる、と思い込んでいました。

実際は、ライブラリの不足などで各開発環境毎に違ってくるようです。

以下にその例を書き残していきます。

そもそもの開発環境

開発環境はこんな感じになります。

$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import kivy
[INFO   ] [Logger      ] Record log in /Users/xxxxxxxx/.kivy/logs/kivy_17-02-16_10.txt
[INFO   ] [Kivy        ] v1.9.2.dev0, git-Unknown, 20170210
[INFO   ] [Python      ] v2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]

MacをベースにWindows10 Pro, CentOS7を全部会社のマシン上にインストール。

Macの場合

冒頭に記述した通り、app拡張子のファイルは生成できました。
しかし、起動してみると何も起こらないので、不思議に思い、何がおきてるのだろうと、直接起動してみた。

$ ./dist/xxxx.app/Contents/MacOS/xxxx
 ImportError: No module named importlib
Failed to execute script main

これが最後に出力されました。
原因を色々調べていたのですが、実際は、先頭行にimportが必要なだけだったようですが、これって環境依存だったりするのでしょうか?
(Macだけだったらイヤだな、の意味です)

import importlib

なお、先頭行に追加するまでに、以下のこともやってみました。(一応)

$ pip install -U pyobjc-core pyobjc importlib

深い意味はないです。
import importlibさえ記述できていれば起動できますので、意味がないです。
でも、ビルドエラーが出てるところがあるので、実行しておく方が良いのかもしれません。

Windowsの場合

Macでビルドはできます。
でも、Windowsにビルドしたexeファイルを持っていくと起動しません。
どうやらwindowsはwindowsでビルドせよ、とのことです。
ということは、Linux環境に配布したければ、Linuxでコンパイルしろってことになるんですよね…。
AndroidやiOSはさすがにMacでもビルドできるので良いのですが、MacでWindowsを動かすWine入れたら動いたりするのかな?とちょっと悩ましい部分です。
もしくはビルド用に仮想マシンを構築するか…。(これが一番手っ取り早いけど、高くもつく)

確かにビルドログの中に、win32comがねーよってのはちょっと見かけてましたけど、まさかマルチプラットフォームできないのはちょっと残念です。

そして、Mac用にwin32comは用意されてないの?と、調べた結果が、コレでした。

COM is Windows only.

おうふ…。
なので、当セッションの最初の方のWine入れるか?とちょっと悩んだのですが、Wineが好きじゃない(問題発言)

と言うことで、次回のテーマは必然的にWindowsによるpythonの開発環境構築にします。

Linuxの場合

LinuxもWindowsと同様でその環境でビルドしなきゃならないっぽいです。
MacでビルドしたファイルをLinuxに持っていき、下記の通り権限を持たせて見ましたが、実行されませんでした。

chmod a+x

そりゃkernel違えば動かないかもしれませんけど、マルチビルドしようと思ったら、各環境がないとビルドできないのか…
幸いWindows以外はビルドするだけならCUI環境が用意できるので良いです。

それでも動作確認は必要なので、GUIは必要なのかなぁ。

結論

各プラットフォームでpythonとkiviをインストールした環境を用意しましょう。
そして、ビルドは各々のプラットフォームで行いましょう。

次回は「Windows用環境構築、Cent OS用環境構築をそれぞれ作ってみた」です。
Shell流せば…とか淡い考え持ってたらWindowsで動かないことに気づいた、時代はAnsibleなのか!?(でも、VM上のマシンにAnsibleを流すにはどうすれば!?)