前回、ビルド出来た!と思っていた。
しかし、ビルドができていただけで動くアプリになっていませんでした。
そこで色々調査して回ったので、まとめておこうと思います。
調査結果などからわかったこと
本当の意味でのマルチプラットフォームじゃない、ということがわかりました。
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を流すにはどうすれば!?)