pythonアプリをstandaloneアプリ化する必要がでたので色々と調べた。
変換ツールはいろいろあったけれど、結局pyinstallerを使うことにした。
ちなみにqtcreatorをつかうとGUI作るのまじで楽。(無料期間過ぎたらお金かかる。)
OUTLINE
- 環境
- pyenvで環境作る
- PyQt5
- pyinstaller
- qtアプリケーションを作成
- standaloneアプリ生成
環境
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をインストールする必要があった。
env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install -v 3.5.0
~いろいろいんすとーるする。~
pyenv virtualenv 3.5.0 stand_app
そしてこれも。
pip install --upgrade pip
PyQt5
とりあえずinstall
brew install pyqt5 --with-python
pyqtはpipでinstallできないぽいので、brewでインストールしたpyqt5をpyenv環境にシンボリックリンクして使えるようにする。
ln -s /usr/local/Cellar/pyqt5/5.6/lib/python3.5/site-packages/PyQt5/ /usr/local/opt/pyenv/versions/stand_app/lib/python3.5/site-packages/
とりあえずこれで使える。 若干きもいが。。
pyinstaller
pyinstaller はpipからinstallできる。
pip install pyinstaller
qtアプリケーションを作成
とりあえず簡単なqtアプリをかく。
以下をqt.pyとして保存
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アプリ生成
そしてやっとお待ちかねのこれ。
コマンドラインから
pyinstaller --onefile --windowed qt.py
どりゃ。
./dist/に
qt.app
ができる!!!!
やったぜ!!