我不确定我的问题/标题措辞是否正确。我正在开发 OSX 10.6 和 python 2.7.1。我使用 setuptools 和 py2app 创建了一个 .app,我可以从 finder 或终端使用 open 运行它。
我对该计划的目标之一是快速启动。
当我进入 build 文件夹并直接使用 python 运行 python 程序时,我的窗口立即弹出。在不到 1 秒的时间内。这是相当一致的。但是当我进入 dist 文件夹并运行 .app(从 finder 或打开)时,在窗口出现之前会有几秒钟的暂停。大约 4 到 5 秒,相当一致。
我想这可能与打开试图查找文档或其他东西有关,所以我尝试了这个:
open -a testrun.app ""
..果然,窗口立即弹出!
我需要在 setup.py 或某个地方做些什么来告诉它这不是面向文档的程序吗?
再详细一点——
我正在使用 Python 2.7.1(作为系统 python)在 OSX 10.6.8 上工作。我已经尝试了一些小的变化(2.6 with python_select,2.7.3 in a virtualenv..),但到目前为止,它没有任何区别。
我创建了一个简单的 .dylib(在 Objective-c 中),它导出了一个使用可可打开窗口的函数。我创建了一个非常简单的 python 扩展模块(在 c 中),其中有一个调用 .dylib 函数的函数。
(我的计划是为 gui 调用和相关的平台特定调用创建一个平台特定的共享/动态库,以及一个使用它的跨平台 c 库,然后创建高级语言扩展模块,使 c这些语言可用的库。)
我写了一个非常简单的调用 c 函数的 python 程序。我编写了一个 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]
)