別途ご紹介したアップサンプリングのPythonスクリプトをMacでアプリ化してみることにしました。
見た目は全く同じですけど、Apple Silicon用のアプリになっています。(Intel非対応なのはあとで説明します。)
PythonスクリプトをMacアプリとして配布したいと考えた時、まずは定番のpy2appを試す方は多いと思います。
今回もpy2appでアプリ化を目指しました。
py2appはmacOS専用のパッケージングツールでsetuptoolsベースでアプリバンドルを生成します。
しかし、今回のアップスケールだとPyTorchやtorchvisionなどC拡張を含むモジュールの依存関係が複雑すぎるらしく、うまく組み込めません。
色々工夫してみましたが根本的な解決には至らず諦めました。
そこで頭を切り替えてやってみたのがPyInstallerです。
PyInstallerはWindows・macOS・Linuxのクロスプラットフォーム対応です。
依存関係の問題はやっぱり自動検出ですんなりとは全くいきませんでしたが、サブディレクトリやデータファイルをspecファイルに明示的に追加することで対応できました。
basicsrとrealesrganの各フォルダをdatasに地道に指定するのがポイントでしょうか。
欠点としては実行中のアーキテクチャで動作するバイナリしか作れないことでしょうか。
Python自体がuniversal2ビルドであれば、PyInstallerでもuniversal2バイナリの作成が理論上可能らしいですけど。
そこさえ気にしなければ完成したアプリを他のMacにコピーしても無事に動作しました。
なにせデータファイル等がでかいのでバイナリサイズが660MBほどになってしまってますけど。
ちなみにアプリアイコンはicon.icnを生成すればちゃんと作れますし、細かいことを気にしなければなかなか良い仕上がりです。
昔からのコンパイル環境に慣れた身としては今どきなのでもうちょっとスマートにできたら良いのになとは感じましたけどね。