2010-08-11 57 views
2

对于Python2.6,Evt模块(来自Carbon import Evt)似乎没有响应OSX上的TickCount()。但是Python2.5很好:Evt.TickCount()在OSX 10.6.3上找不到Python2.6

from Carbon import Evt 
s = Evt.TickCount() 

在Python2.5上我得到一个返回的整数。在Python2.6上,我得到:

AttributeError: 'module' object has no attribute 'TickCount' 

这是在Snow Leopard上。是否有一些库需要在OSX上更新以允许TickCount()工作?由于使用py2app,我实际上遇到了这个问题。

更新巴里的回答是: 的问题是,py2app创建应用程序,启动时,给我:

File "/Users/cybertoast/Projects/scripts/dist/fixcatalystlibs.app/Contents/Resources/__boot__.py", line 40, in mainloop 
    [0x0-0x913913].org.pythonmac.unspecified.fixcatalystlibs[11722]  stoptime = Evt.TickCount() + timeout 
    [0x0-0x913913].org.pythonmac.unspecified.fixcatalystlibs[11722] AttributeError: 'module' object has no attribute 'TickCount' 

我加VERSIONER_PYTHON_PREFER_32_BIT = yes以我的.bash_profile文件,但应用程序,py2app造成仍然有同样的问题。 Python解释器对32位修补程序感到满意。但仍然需要py2app的解决方案。

回答

2

由于破损的代码仅用于argv模拟,因此我可以通过禁用argv模拟来使我的应用程序工作。这可以通过将py2app OPTIONS哈希中的'argv_emulation'键设置为False来完成。

例子:

APP = ['MyApp.py'] 
OPTIONS = { 
    'argv_emulation': False, 
    ... 
} 

setup(
    app=APP, 
    options={'py2app': OPTIONS}, 
    setup_requires=['py2app'], 
) 
0

Python在Snow Leopard中默认运行在64位模式下。看来Carbon.Evt尚未转换为完整的64位兼容性。你可以尝试在32位模式下运行证实了这一点(见man python):

oso:~ barry$ export VERSIONER_PYTHON_PREFER_32_BIT=yes 
oso:~ barry$ python 
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import Carbon.Evt as evt 
>>> evt.TickCount() 
2973070 
>>> 

所以,无论是在32位模式下运行py2app,或者告诉我们你想要做什么,或许我们可以提供64位兼容替代方案。

+0

根据您的答案更新了问题。这对解释器很有帮助,但不适用于py2app。 – cybertoast 2010-08-11 20:30:53

+0

我想你可以在应用程序的Info.plist中指定环境变量。您可以在应用程序的plist中设置“VERSIONER_PYTHON_PREFER_32_BIT”。如果没有,开始挖掘py2app如何选择解释器。 – 2010-08-11 21:00:13

+0

这不是一个真正解决方案,而是一个解决方法,但我最终最终使用鸭嘴兽,它没有这个问题。我能够指定我想要的库,并且创建的包可以在其他机器上正常工作(但我没有广泛测试过,因此可能仍然存在版本问题)。 – cybertoast 2010-10-12 14:12:31

0

也许最简单的解决方案是使用另一个仅32位的Python,而不是10.6版的Apple提供的Python,例如,使用the python.org installer安装Python 2.6。如果您想将您的应用作为可在多个OS X版本上使用的独立应用分发,无论如何您都需要这样做。