在OSX 10.6.3上找不到Python2.6的Evt.TickCount()

时间:2010-08-11 19:19:34

标签: python macos py2app

使用Python2.6,Evt模块(来自Carbon import Evt)似乎没有响应OSX上的TickCount()。但Python2.5很好:

from Carbon import Evt
s = Evt.TickCount()

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

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

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

Barry的回复更新 问题是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'

我在.bash_profile中添加了VERSIONER_PYTHON_PREFER_32_BIT = yes,但是py2app创建的应用仍然存在同样的问题。然而,python解释器对32位修复感到满意。但仍需要py2app的解决方案。

4 个答案:

答案 0 :(得分:2)

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

示例:

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

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

答案 1 :(得分:1)

我一直在使用的代码需要使用argv_emulation,所以上面的解决方案没有帮助我。最后,我在plist文件中使用了LSArchitecturePriority,将其设置为i386。这解决了我的问题,并允许我将argv_emulation设置为True。

可以在此处找到更多信息:http://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#/

答案 2 :(得分:0)

在Snow Leopard中,Python默认以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位兼容的替代方案。

答案 3 :(得分:0)

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