pythonアプリをdesktop化する必要がでたので色々と調べた。
pythonアプリをstandaloneアプリにするツールはいろいろあったけれど、結局pyinstallerを使うことにした。
ちなみにqtcreatorをつかうとGUI作るのまじで楽。
OUTLINE
- 環境
- pyenvで環境作る
- PyQt5
- pyinstaller
- qtアプリケーションを作成
- standaloneアプリ生成
環境
1 2 3 4 |
MacOSX El Capitan 10.11.5 python3.5.0 (homebrew pyenv-virtualenv) qt5,pyqt5 (homebrew) |
mac環境でpythonのバージョンをpyenvで管理している人はたくさんいる気がするし、pyenvやqtをhomebrewで入れている人は多い気がするのに、まとまった情報は探してもなかなか出てこなかった。
pyenvで環境作る
何も考えずpyenvで入れたpython3.5.0で pyinstaller使おうとしたら
libpython3.4.dylibがないよ!的なエラーが出た。
pythonをframeworkとして入れておかないといけないらしい。
コンパイル周りにも気を使ってpythonをインストールする必要があった。
1 2 3 4 |
env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install -v 3.5.0 ~いろいろいんすとーるする。~ pyenv virtualenv 3.5.0 stand_app |
そしてこれも。
1 2 |
pip install --upgrade pip |
PyQt5
とりあえずinstall
1 2 |
brew install pyqt5 |
pyqtはpipでinstallできないぽいので、brewでインストールしたpyqt5をpyenv環境にシンボリックリンクして使えるようにする。
1 2 |
ln -s /usr/local/Cellar/pyqt5/5.6/lib/python3.5/site-packages/PyQt5/ /usr/local/opt/pyenv/versions/stand_app/lib/python3.4/site-packages/ |
とりあえずこれで使える。 若干きもいが。。
pyinstaller
pyinstaller はpipからinstallできる。
1 2 |
pip install pyinstaller |
qtアプリケーションを作成
とりあえず簡単なqtアプリをかく。
以下をqt.pyとして保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<br />import sys from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication) from PyQt5.QtGui import QFont from PyQt5.QtCore import QCoreApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): QToolTip.setFont(QFont('SansSerif', 10)) #font-familyとfontsizeの指定 self.setToolTip('This is a <b>QWidget</b> widget')#マウスオンでツールチップを入れる。 btn = QPushButton('Button', self) #ボタンの生成 btn.setToolTip('This is a <b>QPushButton</b> widget') # マウスオンでツールチップを入れる。 btn.clicked.connect(QCoreApplication.instance().quit) # ボタンを押すと画面が閉じる btn.resize(btn.sizeHint()) # いい感じのボタンサイズとボタンのエフェクトを指定してくれる。 btn.move(50, 50)#ボタンのポジションの設定 self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Tooltips') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
standaloneアプリ生成
そしてやっとお待ちかねのこれ。
コマンドラインから
1 2 |
pyinstaller --onefile --windowed qt.py |
どりゃ。
./dist/に
qt.app
ができる!!!!
やったぜ!!