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

  • 0
    Like
  • 0
    Comment

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

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

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

    本当の意味でのマルチプラットフォームじゃない、ということがわかりました。
    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を流すにはどうすれば!?)