为什么py2app.app的启动时间比同一个python程序要长?

2024-05-15 09:53:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定我的问题/题目措辞是否正确。我正在研究OSX10.6和Python2.7.1。我使用setuptools和py2app创建了一个.app,我可以从finder或使用open的终端运行它。在

我计划的目标之一是迅速启动。在

当我进入build文件夹并直接使用python运行python程序时,我的窗口立即弹出。不到1秒。这是相当一致的。但是当我进入dist文件夹并运行.app时(无论是从finder还是在open中),在窗口出现之前会有几秒钟的停顿。大约4到5秒,相当一致。在

我想可能是因为open试图找到一个文档或其他东西,所以我尝试了以下方法:

open -a testrun.app ""

……果然,窗户马上就开了!在

我有什么事要做吗设置.py或者在某个地方告诉它这不是一个面向文档的程序?在

再详细一点-

我正在使用python2.7.1(作为系统Python)开发osx10.6.8。我已经尝试过一些小的变化(2.6版本的python_select,2.7.3版本的virtualenv….),但是到目前为止,它还没有起到任何作用。在

我创建了一个simple.dylib(在objective-c中),它导出一个使用cocoa打开窗口的函数。我创建了一个非常简单的python扩展模块(用c编写),其中有一个函数调用.dylib函数。在

(我的计划是用平台语言为gui调用和相关的平台特定调用创建一个特定于平台的共享/动态库,并创建一个使用该库的跨平台c库,然后创建高级语言扩展模块,使c库对这些语言可用。)

python编写了一个非常简单的c函数。我写了一篇设置.py它构建一切并使用py2app创建一个.app。在

以下是.dylib的构建脚本:

^{pr2}$

这是设置.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]
)

Tags: 函数py程序文件夹语言appfindersetup
2条回答

将“argv_emulation”设置为False,除非您确实需要该功能(也就是说,除非您希望能够将文件放在应用程序包中,然后将这些文件名作为参数系统argv). 在

“Argv_emulation”是一种将请求打开文件的AppleEvents转换为系统argv. 为此,仿真代码启动事件循环并等待那些打开的事件或超时。你很可能会遇到超时。在

我不知道Mac上的py2app(从未使用过),但是如果它的工作原理与http://www.pyinstaller.org/相似,那么二进制文件必须将python运行时、程序和所有模块解压到内存中。这需要时间。在

相关问题 更多 >