2010-08-11 58 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版本上使用的獨立應用分發,無論如何您都需要這樣做。