2

在 Python2.6 中,Evt 模块(来自 Carbon 导入 Evt)似乎没有响应 OSX 上的 TickCount()。但是Python2.5很好:

from Carbon import Evt
s = Evt.TickCount()

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

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

这是在雪豹上。是否有一些库需要在 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

4 回答 4

2

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

例子:

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

setup(
    app=APP,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
于 2010-11-27T08:28:36.897 回答
1

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

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

于 2012-01-25T15:16:49.533 回答
0

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

于 2010-08-12T01:25:24.917 回答
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
>>> 

所以,要么py2app在 32 位模式下运行,要么告诉我们你想要做什么,也许我们可以提供一个 64 位兼容的替代方案。

于 2010-08-11T19:28:40.383 回答