私の質問/タイトルの言い回しが正しいかどうか確信が持てません。私はOSX 10.6とpython 2.7.1に取り組んでいます。setuptools と py2app を使用して .app を作成しました。これは、ファインダーから、または open を使用してターミナルから実行できます。
プログラムの私の目標の 1 つは、迅速にローンチすることです。
ビルド フォルダーに移動し、python を使用して直接 python プログラムを実行すると、ウィンドウがすぐにポップアップします。1秒以内。それはかなり一貫しています。しかし、dist フォルダーに移動して .app を (ファインダーから、または開いて) 実行すると、ウィンドウが表示される前に数秒の一時停止があります。約 4 ~ 5 秒、かなり一貫して。
ドキュメントか何かを見つけようとしているオープンと関係があるのではないかと思ったので、これを試しました:
open -a testrun.app ""
..確かに、ウィンドウはすぐにポップします!
これがドキュメント指向のプログラムではないことを伝えるために setup.py またはどこかで何かする必要がありますか?
もう少し詳しく――
私はOSX 10.6.8でPython 2.7.1を使用しています(システムpythonとして)。これについていくつかのマイナーなバリエーションを試しました(python_selectを使用した2.6、virtualenvの2.7.3..)が、これまでのところ違いはありません。
ココアを使用してウィンドウを開く関数をエクスポートする単純な .dylib (objective-c) を作成しました。.dylib 関数を呼び出す関数を含む非常に単純な python 拡張モジュール (c) を作成しました。
(私の計画は、GUI 呼び出しと関連するプラットフォーム固有の呼び出し用のプラットフォーム言語でプラットフォーム固有の共有/動的ライブラリを作成し、それを使用するクロスプラットフォームの c ライブラリを作成してから、c を作成する高レベル言語拡張モジュールを作成することです。これらの言語で利用可能なライブラリ)。
c 関数を呼び出す非常に単純な python プログラムを作成しました。すべてをビルドし、py2app を使用して .app を作成する setup.py を作成しました。
.dylib のビルド スクリプトは次のとおりです。
gcc -framework Cocoa -dynamiclib -x objective-c testlib.objc -current_version 1.0 -compatibility_version 1.0 -o libTestlib.1.dylib -arch i386 -arch x86_64
setup.py は次のとおりです。
from setuptools import setup, Extension
APP = ['testrun.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'frameworks': ['/Users/shavais/scratch/objc/libTestlib.1.dylib']
}
module1 = Extension(
'demo',
sources = ['demo.c'],
libraries = ['Testlib.1'],
library_file_directories = ['/Users/shavais/scratch/objc']
)
setup(
name = 'testrun',
description = 'This is a testrun package',
app = APP,
data_files = DATA_FILES,
options = {'py2app': OPTIONS},
setup_requires = ['py2app'],
version = '1.0',
py_modules = ['testrun'],
ext_modules = [module1]
)