我不確定我的問題/標題是否正確。我正在開發OSX 10.6和Python 2.7.1。我使用setuptools和py2app來創建一個.app,我可以使用open從finder或者終端運行它。爲什麼py2app應用程序比同一個python程序啓動需要更長的時間?
該計劃的目標之一是快速啓動。
當我進入構建文件夾並直接使用python運行python程序時,我的窗口立即彈出。在不到1秒內。這是相當一致的。但是,當我進入dist文件夾並運行.app(從查找程序或打開)時,窗口出現之前會有幾秒鐘的暫停。大概持續4到5秒鐘。
我想也許這有事可做開放試圖找到一個文件或東西,所以我嘗試這樣做:
open -a testrun.app ""
..和果然,窗口彈出的時候了!
有什麼我需要做的setup.py或某個地方告訴它,這不是一個面向文檔的程序?
更詳細一點 -
我工作的OSX 10.6.8與Python 2.7.1(作爲系統蟒蛇)。我已經嘗試了一些小的變化(在python_select中爲2.6,在virtualenv中爲2.7.3 ..),但到目前爲止,它沒有任何區別。
我創建了一個簡單的.dylib(在objective-c中),它導出一個使用cocoa打開窗口的函數。我創建了一個非常簡單的python擴展模塊(在c中),它有一個調用.dylib函數的函數。 (我的計劃是在平臺語言中爲gui調用和相關的特定於平臺的調用創建一個特定於平臺的共享/動態庫,以及一個使用它的跨平臺c庫,然後創建高級語言擴展模塊這使得c庫可用於這些語言。)
我寫了一個非常簡單的python程序,它調用c函數。我寫了一個setup.py,它構建了一切,並使用py2app來創建一個.app。
這裏是爲名爲.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]
)