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

OSX 10.6.3上的Python2.6未找到Evt.TickCount(),python,macos,py2app,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' 这是关于雪豹的。是否有一些库需要在OSX上更新以允许Ti

在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'
这是关于雪豹的。是否有一些库需要在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_配置文件中添加了VERSIONER_PYTHON_preference_32_BIT=yes,但是py2app创建的应用程序仍然存在同样的问题。然而,python解释器对32位的修复很满意。但是仍然需要py2app的解决方案。

Python在雪豹中默认以64位模式运行。看来,
Carbon.Evt
尚未过渡到完全的64位兼容性。您可以通过尝试在32位模式下运行来确认这一点(请参见
manpython
):


因此,要么在32位模式下运行
py2app
,要么告诉我们您正在尝试做什么,也许我们可以提供一个64位兼容的替代方案。

最简单的解决方案可能是使用另一个仅32位的Python,而不是苹果在10.6中提供的Python—例如,使用安装Python 2.6。如果您想将应用程序作为可在多个OS X版本上使用的独立应用程序分发,您仍然需要这样做。

由于中断的代码仅用于argv仿真,因此我可以通过禁用argv仿真使我的应用程序正常工作。这可以通过将py2app选项哈希中的“argv_仿真”键设置为False来实现

例如:

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

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

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


更多信息可在此处找到:

根据您的答案更新了问题。这对解释器很有帮助,但对py2app没有帮助。我认为可以在应用程序的Info.plist中指定环境变量。您可以在应用程序的plist中设置
VERSIONER\u PYTHON\u preference\u 32\u位
。如果不是,那就开始深入研究py2app是如何选择解释器的。这实际上不是一个解决方案,而是一个变通办法,但我最终使用了Platypus,它没有这个问题。我能够指定我想要的库,并且创建的包在其他机器上运行良好(但我没有对此进行广泛测试,因此可能仍然存在版本问题)。在使用platypus几周后,我是一个粉丝-到目前为止没有版本控制问题。
APP = ['MyApp.py']
OPTIONS = { 
   'argv_emulation': False,
   ...
}

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