Так как сломанный код использовался только для эмуляции argv, мне удалось заставить мое приложение работать, отключив эмуляцию argv. Это можно сделать, установив ключ «argv_emulation» в хэш-настройке py2app OPTIONS равным False.
Пример:
Carbon.Evt
С Python2.6 модуль Evt (из Carbon import Evt), похоже, не реагирует на TickCount () на OSX. Но Python2.5 в порядке:
from Carbon import Evt
s = Evt.TickCount()
На Python2.5 я получаю возвращаемое целое число. На Python2.6 я получаю:
AttributeError: 'module' object has no attribute 'TickCount'
Это на Snow Leopard. Есть ли какая-то библиотека, которая должна быть обновлена ??на OSX, чтобы работать с TickCount ()? У меня есть эта проблема из-за использования файла «/Users/cybertoast/Projects/scripts/dist/fixcatalystlibs.app/Contents/Resources/__boot__.py» , строка 40 , в mainloop [ 0x0 - 0x913913 ]. org . pythonmac . не указано . fixcatalystlibs [ 11722 ] точки остановки = Evt . TickCount () + тайм-аут [ 0x0 - 0x913913 ]. org . pythonmac . не указано . fixcatalystlibs [ 11722 ] AttributeError : объект 'module' не имеет атрибута 'TickCount' .
Обновление для ответа Барри: проблема в том, что приложение, созданное py2app при запуске, дает мне:
APP = ['MyApp.py']
OPTIONS = {
'argv_emulation': False,
...
}
setup(
app=APP,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Я добавил VERSIONER_PYTHON_PREFER_32_BIT = yes в мой .bash_profile, но приложение, которое создает py2app, все еще имеет ту же проблему. Интерпретатор python, однако, доволен 32-разрядным исправлением. Но все же нужно решение py2app.
Код, который я использовал, требует использования argv_emulation, поэтому вышеупомянутые решения мне не помогли. В конце концов, я использовал LSArchitecturePriority в файле plist, установив его на i386. Это решило мою проблему и позволило мне сохранить значение argv_emulation равным True.
Более подробную информацию можно найти здесь: http://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#/
Python работает в 64-битном режиме по умолчанию в Snow Leopard. Похоже, что man python
переход к полной 64-разрядной совместимости не прошел. Вы можете подтвердить это, пытаясь запустить в 32-битном режиме (см. ):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
Таким образом, либо работайте py2app
в 32-битном режиме, либо расскажите нам, что вы пытаетесь сделать, и, возможно, мы сможем предоставить 64-битную совместимую альтернативу.
Вероятно, самым простым решением является использование другого 32-битного Python вместо поставляемого Apple в 10.6 - например, установите Python 2.6 с помощью установщика python.org . Если вы хотите распространять свое приложение как автономное приложение, которое можно использовать в нескольких версиях OS X, вам все равно придется это делать.