
アプリケーションインターフェースでHTMLとJavaScriptを使用する方が便利になりました。 そして、まさにそのようなタスクが最近、私の前に現れました。1つの重要な条件があります-出力は、追加ライブラリのインストールを必要とせず、通常のユーザー環境で実行できる完全にスタンドアロンのアプリケーションです。
その自然な魅力のため、WebKitを搭載したPython + PySideがメイン言語として選択され、py2appがアプリバンドルのビルドに使用されました。
クリーンなシステムでアプリケーションを最初に実行しようとしたときに問題が発生しました-py2appが単独で解決できない外部依存関係が多数発見されました。 ネコの下で、この問題がどのように解決されたかについてのステップバイステップの指示。
py2appにバンドルに必要なライブラリがすべて含まれていない理由を理解しようとして、ある記事では、Mac OSに組み込みのインタープリターを使用して完全にスタンドアロンのアプリケーションを作成することは不可能であり、MacPortを使用する必要があるという考えが見つかりました。 やってみましょう。
準備する
必要なのは:
- Xcode
- Macports
- Python
- virtualenv
- Qt4
- パイサイド
- py2app
Xcode
Mac OS用の開発ツールと必要なgccの両方を搭載しています。
私は最新バージョンの4.2を使用しましたが、以前のバージョン(3.X)では問題はないはずです。
まだない場合は、Mac OSインストールディスクまたはApple Webサイトから入手してください(無料の登録が必要です)
Macports
ポピーにたくさんの便利なツールとライブラリを置くことができるパッケージマネージャー。
標準的な方法(pkg)でインストールされます。 MacPorts.orgから取得します。
インストール後、念のため、以下を更新できます。
$ sudo port selfupdate
Python
MacPortsから配置します。
$ sudo port install python27
異なるバージョンのpythonを使用している場合は、今後それを置き換えてください。
virtualenv
Python用の分離された環境を作成できるツール。 Pythonの複数のバージョンが必要な場合、または異なるプロジェクトが異なるライブラリを必要とする場合に非常に便利です。これにより、さらなる展開が簡単になります。 この場合、 virtualenvを使用して、スタンドアロンアプリケーションが表示される「スタンドアロンサンドボックス」を作成します。
$ sudo easy_install virtualenv
virtualenvwrapperを負荷に入れると、環境での作業が簡単になります。
$ sudo easy_install virtualenvwrapper
Qt4
事務所から置きます。 サイト 、私はCocoaを使用しました:Mac OS X 10.5-10.6のMacバイナリパッケージ
パイサイド
使い慣れたプログラミング言語のQtのすべてのパワーと強度を使用できるPythonのライブラリ。
私はpipまたはeasy_install(より論理的です)を介してPySideを仮想環境に直接インストールしようとしましたが、PySideはこれらのパッケージマネージャーに必要な形式で配信されなかったことが判明しました。その結果、ライブラリをコンパイルしようとして多くの時間が殺されました...数日後に停止しました、座って、サードパーティのlibのソースコードを支配したとき=)
その結果、 パッケージの開発者が提供するインストールを実行します 。
環境設定
準備の部分は終わりました。仮想環境を作成し、それを埋めることに直接進みます。
仮想環境を作成する
環境が存在する場所を選択します。このために〜/ .bash_profileを追加します
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
環境を作成する
$ . ~/.bash_profile
$ mkdir -p $WORKON_HOME
$ mkvirtualenv --no-site-packages --python=/opt/local/bin/python2.7 py27
# --no-site-packages - ,
# --python=/opt/local/bin/python2.7 -
# py27 -
その後、基本的なディレクトリ構造と必要なファイルが$ WORKON_HOME / py27に作成されます。 さらに、環境がアクティブになり、コマンドラインの先頭に(py27)が表示されます。 将来的には、アクティブ化するには、実行する必要があります
$ workon py27
pythonを呼び出して、正しいバージョンが開始されていることを確認できます。
(py27) $ python
Python 2.7.2 (default, Jul 21 2011, 01:27:20)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
次に、すべてのライブラリとモジュールを新しい環境に転送する必要があります。
# PySide packages
$ cd /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
$ mv PySide/ ~/Envs/py27/lib/python2.7/site-packages/
$ mv pysideuic/ ~/Envs/py27/lib/python2.7/site-packages/
# PySide libs
$ cd /usr/lib/
$ sudo mv libpyside-python2.7.* ~/Envs/py27/lib/
# PySide
$ sudo mv libshiboken-python2.7.* ~/Envs/py27/lib/
# Qt4 libs
$ cd /Library/Frameworks/
$ cp -pR Qt* ~/Envs/py27/lib/
$ cp -pR phonon.framework ~/Envs/py27/lib/ # framework!
# Qt ,
$ sudo /Developer/Tools/uninstall-qt.py
そのため、ほぼすべての準備が整い、最終的な研磨と検証が行われました。
環境を作成およびアクティブ化する便利な方法に加えて、virtualenvwrapperは、さまざまなイベント( preactivate 、 postactivate 、 predeactivate 、 postdeactivateなど)( 完全なリスト )のフックを提供します。 私たちは現在、ライブラリと異なるモジュールの環境をどこで見るべきかを伝える変数を追加するpostactivateに興味を持っています。
$ vi ~/Envs/py27/bin/postactivate
#
export DYLD_FRAMEWORK_PATH=~/Envs/py27/lib/
export DYLD_LIBRARY_PATH=~/Envs/py27/lib/
クイックチェック:
$ workon py27
(py27) $ python
Python 2.7.2 (default, Jul 21 2011, 01:27:20)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PySide
>>> PySide
<module 'PySide' from '/Users/smaant/Envs/py27/lib/python2.7/site-packages/PySide/__init__.pyc'>
>>>
すべてを正しく実行した場合、結果は次のようになります。 たくさんの間違いを見つけたら、...オプションが可能です:)
py2appとバトルチェック
これで、テストアプリケーション-qt_test.pyを作成する準備がすべて整いました。
#!/usr/bin/env python
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://www.pyside.org/"))
web.show()
sys.exit(app.exec_())
確認する
$ workon py27
(py27) $ python qt_test.py

py2app
py2appが登場しました 。これにより、アプリケーションを完全なバンドルにまとめることができます。 とりわけ、 virtualenv開発者は、仮想環境に別のpipパッケージマネージャーを慎重に配置し、それを使用してpy2appを配置します 。
$ workon py27
(py27) $ pip install py2app
バンドルを生成するために、 py2appは特別なファイルsetup.pyを使用します。 最初から作成する方法については、ドックで詳しく説明されています。既製のものを使用します。
from setuptools import setup APP = ['qt_test.py'] OPTIONS = {'argv_emulation': False, 'includes' : ('PySide.QtNetwork', ), 'semi_standalone': 'False', 'compressed' : 'True', 'frameworks' : ('libpyside-python2.7.1.0.dylib', 'libshiboken-python2.7.1.0.dylib'), } setup( app=APP, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
アプリバンドルがdaddy distに表示されます。これは確実に実行できます。 )
アルゴリズム全体はMac OS X 10.6.8でテストされ、結果のバンドルは同じですがクリーンなシステムでテストされました。
PyQtを使用する場合、アクションのシーケンスはまったく同じになり、 pyqtのみが設定され、ソースファイルではすべてのPySideがPyQtに置き換えられます。 また、 SIPをインストールして、同様に仮想環境に転送し、 setup.pyのincludeに追加する必要があります 。
参照資料
以下は、私が使用したツールとライブラリの完全なリストとそのバージョンです。
- Xcode 4.2
- MacPorts 1.9.2
- Python 2.7.2
- virtualenv 1.6.3
- virtualenvwrapper 2.7.1
- Qt4 4.7.3
- PySide 1.0.4-r1
- py2app 0.6.3
私を大いに助けた2つの記事:
py2appを使用してPyQtアプリからスタンドアロンOS Xアプリケーションバンドルを作成する方法
VirtualenvおよびMacportsを使用したOSX上の複数のPythonバージョン