2

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'

これはユキヒョウです。TickCount()を機能させるためにOSXで更新する必要のあるライブラリはありますか?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'

.bash_profileにVERSIONER_PYTHON_PREFER_32_BIT=yesを追加しましたが、py2appが作成するアプリでも同じ問題が発生します。ただし、Pythonインタープリターは32ビットの修正に満足しています。しかし、それでもpy2appの解決策が必要です。

4

4 に答える 4

2

壊れたコードはargvエミュレーションにのみ使用されていたため、argvエミュレーションを無効にすることでアプリを動作させることができました。これは、py2appOPTIONSハッシュの「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

Snow Leopardでは、Pythonはデフォルトで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
>>> 

したがって、py2app32ビットモードで実行するか、何をしようとしているのかを教えてください。おそらく、64ビット互換の代替手段を提供できます。

于 2010-08-11T19:28:40.383 に答える
0

おそらく最も簡単な解決策は、10.6でAppleが提供したPythonの代わりに別の32ビットのみのPythonを使用することです。たとえば、python.orgインストーラーを使用してPython2.6をインストールします。アプリを複数のOSXバージョンで使用できるスタンドアロンアプリとして配布する場合は、とにかくそれを行う必要があります。

于 2010-08-12T01:25:24.917 に答える