LoginSignup
21
23

More than 5 years have passed since last update.

Python QTアプリ Standalone App化メモ

Last updated at Posted at 2016-09-12

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
ができる!!!!

やったぜ!!

21
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23