Evt.TickCount () не найден в Python2.6 в OSX 10.6.3 - PullRequest
2 голосов
/ 11 августа 2010

В Python2.6 модуль Evt (из импорта Carbon Evt), похоже, не отвечает на TickCount () в OSX. Но Python2.5 в порядке:

from Carbon import Evt
s = Evt.TickCount()

На Python2.5 я получаю возвращенное целое число. На Python2.6 я получаю:

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

Это на снежном барсе. Есть ли какая-нибудь библиотека, которую нужно обновить в 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.

Ответы [ 4 ]

2 голосов
/ 27 ноября 2010

Поскольку испорченный код использовался только для эмуляции argv, я смог заставить свое приложение работать, отключив эмуляцию argv. Это можно сделать, установив ключ 'argv_emulation' в хеше py2app OPTIONS на False.

Пример:

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

setup(
    app=APP,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
1 голос
/ 25 января 2012

Код, который я использовал, требует использования argv_emulation, поэтому приведенные выше решения не помогли мне.В конце я использовал LSArchitecturePriority в файле plist, установив его на i386.Это решило мою проблему и позволило мне установить для argv_emulation значение True.

Более подробную информацию можно найти здесь: http://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#/

0 голосов
/ 12 августа 2010

Вероятно, самое простое решение - использовать другой 32-битный Python вместо поставляемого Apple в 10.6 - например, установить Python 2.6, используя установщик python.org .Если вы хотите распространять свое приложение как отдельное приложение, которое можно использовать в нескольких версиях OS X, вам все равно придется это делать.

0 голосов
/ 11 августа 2010

Python работает в 64-битном режиме по умолчанию в Snow Leopard. Похоже, что 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-битную совместимую альтернативу.

...