(2020.05.07)
・環境一覧のPySide2バージョンが誤っていたので修正しました。
・Qt for Pythonを使った実装の記事を書きましたので末尾にリンクを貼りました。
Ubuntu 18.04 LTSでQt for Python環境を構築したメモです。
QtもPythonもバージョンアップ頻度が高く、しかも仕様が変更される事もあるため環境構築で苦労しますね。今回PythonベースでQtを使ったGUIアプリケーションを作ろうとしたのですが、その事前の環境整備で時間かかってしまいました。
Qtの2020年4月現在の最新版は5.14.2ですが、開発中のC++ NativeアプリがQt 5.12.6(LTS)を使ってたのでこれに合わせました。同様のやり方で任意のバージョンを使えますが、そもそもQt for Pythonは新しいプラットフォームで発展中のため、できるだけ最新を追いかけたほうが良いでしょうね。
という事で、今回構築した環境(組み合わせ)は以下の通りです。
- Ubuntu 18.04 LTS
- Python 3.6.10 (pyenv使用)
- Qt SDK 5.12.6
- PySide2 5.12.6(pipenv使用)
pyenvやpipenvの環境は整備されていて、使用したいバージョンのPythonが動作するようになっている事が前提です。
参考記事
Qt SDKインストール
個人使用のためオープンソース版を使っています。(Qtはモジュールやバージョンによってライセンスが異なりますので、十分チェックするようにしてくださいね。特にOSS版を商用利用する際にはGPL/LGPL v3などのライセンスをちゃんと確認するようにしてください。適当な事をするとストールマンにめっちゃ怒られますよ〜 :D)
Qt OSS版インストーラーはこちらからダウンロードできます。ページの下の方に下記画像のような場所がありますので「Download the Qt Online Installer」をクリックします。

そして引き続き次のページで、ダウンロードする内容を確認して「Download」をクリック。

さて、これで「qt-unified-linux-x64-x.x.x-online.run」なるファイルがダウンロードできます。Qtのインストールでは、初回のみ上記オンラインインストーラーを使って、その後の新バージョン追加などはQt Maintenance Toolというものを使います。

ダウンロードしたオンラインインストーラーに実行権限を与えてインストールを開始。なおディフォルトのインストール先は$HOME/Qtのため、管理者権限は不要です。
$ chmod +x qt-unified-linux-x64-x.x.x-online.run
(x.x.xの所はダウンロードしたインストーラーのバージョンに合わせます)
$ ./qt-unified-linux-x64-x.x.x-online.run
あとはインストーラーの手順に沿って、インストールしたいバージョンを選択します。この辺は情報溢れてますから割愛しますが一つだけ注意点を。Qtバージョン選択の所で任意のバージョンが表示されない事があります。これはフィルタで「latest」にチェックが入っているため、現在有効なリリースバージョンの最新版しか見えないようになっているからです。過去バージョンを指定して取得したい場合は「Archive」を選択しましょう。
Qt for Pythonインストール
さて、お次はQt for Pythonのインストールです。
Qt for PythonにはPyQt5、PySide、PySide2などのパッケージがあります。PySideはQt4までの旧バージョン、PyQt5はQt5対応して十分使えます。(というか、今までの主流です)
しかしながら最近(確かQt 5.11から?)Qtが正式にPython対応しました。これにより公開されたパッケージがPySide2であり、Qt for Python環境としての公式実装とされているようです。
実は今までPyQt5を使っていたのですが、今回これを期にPySide2に乗り換えました。Qt for Python = PySide2という理解で良いと思います。
PySide2はpipやpipenvでインストール可能ですが、Qtバージョンに対応したパッケージをインストールする必要があります。今回はQt 5.12.6を使っているので、以下の通りになりますね。
$ pipenv install "PySide2~=5.12.6"
これで環境準備は完了です。
PySide2の使い方は・・・また後日。
(2020.05.07追記)
Qt for Pythonを使ったアプリ実装の記事を書きましたのでリンクを貼っておきます。