さて、先日書いていたPython + sqlite + PyQt5の件は専らmacOSとUbuntuの上のことであった。というのは、Windowsでは同様のものをVisual C#で書いていたからなのだけれど、実は順番は逆で、最初にVisual C#で書いて動くものができ、これをmacOSでも動くようにできないかあれこれ調べたところPython + PyQt5が使えそうだと言うことが分かった、ということなのであった。なので最初はPython + Tcl/Tkとかも調べてみたりもした。
上記なので、WindowsではPython + sqlite + PyQt5での動作やさらにpyinstallerでのアプリ化は試していなかったのだが、本日試してみたところうまくいった。まず、Pythonは本家サイトからVer.3.9.6をダウンロードしてインストール。次にPythonの実行ファイルにパスを通し、コマンドラインで
と打つと何故かMicrosoft Storeが立ち上がってくる。実は一度StoreからインストールしたPythonを使っていたのだが、どうにも分からないエラーが出て解消できなかったのでアンインストールして別途本家サイトからダウンロードしてインストールしたのだ。しかもパスまで通したのにそれが起動しない。調べてみると設定 - アプリ - アプリ実行エイリアスでオフにすれば良い、ということが分かったが、本当に要らぬお節介が業腹だ。
何はともあれpythonが普通に起動できるようになると次はpyenvのインストールなのだけれど、元のpyenvはmacOSやLinuxをターゲットとしたものなのでそのままではインストールできない。そのため、pyenv-winというものを作って下さっている方がいて、指示に従ってpyenvをインストールし、さらにパスを通した上でコマンドウィンドウを再起動する。ここでpyenv用のPythonをインストールし直し、global宣言をする。
pyenv install 3.9.6
pyenv global 3.9.6
因みにWindowsの場合はpyinstallerのためにUbuntuでやったようなコンパイルオプションをつけてインストールしなくても大丈夫なようだ。
次はpipのインストールなのだけれど、これは
https://bootstrap.pypa.io/get-pip.py
を手動で適当なディレクトリにダウンロードし、
python get-pip.py
でインストールしたところ、問題なくインストールできた。やはりこれにもパスを通す。これでやっと、
pip3 install --user pyinstaller
pip3 install --user pyqt5
でモジュールがインストールできるようになった。そしてpyinstallerによるアプリ化もmacOSやUbuntuの場合と同じコマンドラインオプションでexeができ、実行できたのであった。また、これで分かったのがWindowsの場合もこのexeを実行するときはテンポラリフォルダに解凍してから実行するので、データベースファイル等は決め打ちの場所においておくか、わざわざユーザに別途場所を指定させるかするしかない、ということ。何にしても、これでPythonスクリプトを一つ書けば三つのプラットフォーム向けにdeployできることが分かった。
後は、GUIのないコマンドをpyinstallerで作れることに気付いたのも収穫。他の人にPythonや関連モジュールをインストールした上でこのスクリプトを実行して下さい、はハードルが高いけれど、exe一個を渡して処理してもらうのであればなんとかやってもらえそうだ。