Macのbashシェルから次を実行すると:
$ file /usr/bin/python
次の3行が表示されます。
/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386): Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc
これは、Pythonが3つすべてのアーキテクチャまたはそのようなものに対してコンパイルされていることを示しているように思われますか?MySQLのセットアップ中に発生したいくつかのエラーに基づいて、使用しているバージョンは64ビットバージョンですので、2つの質問:
どうやってそれを知りましたか?
どうすればPythonを32ビットに変更できますか?異なるコンパイル設定で再コンパイルするよりも劇的なものですか?
BashシェルからArch
がi386
を返すのは、64ビットMacを実行しているプロセッサに基づいて知っているときに、「64ビットモード」ではないことを示すようです?
申し訳ありませんが、これらはすべて初心者向けの質問であり、32/64ビットの全体が私を怒らせており、これを容易にするコマンド/ツールがいくつかあると確信しています。
Python実行しているバージョンはplatform
モジュールで確認できます(sys
モジュールにはいくつかの簡単なヘルパーもあります)
Mac OS Xでは、たとえば、選択したアーキテクチャで「脂肪バイナリ」を実行できます。
Arch -i386/usr/bin/python
not/usr/lib/python自体を(lipo
コマンドで)変更することをお勧めします-システムファイルを改ざんすることで、システムを簡単に使用できなくすることができます。おそらく、システムを残したまま、別個のPython python.orgから(アプリケーションの目的のために)インストールするPython単独で許容される戦略です-それは間違いなくより安全ですシステムファイルの変更!-)
3番目の質問については、うーん、これは私にとっては困惑です-そして間違いなくsuperuser.comに対する質問です(また、Pythonとはまったく無関係であり、プログラミングとはまったく無関係のようです;-)。
http://www.jaharmi.com/2009/08/29/python_32_bit_execution_on_snow_leopard
$ defaults write com.Apple.versioner.python Prefer-32-Bit -bool yes
Snow Leopardのvirtualenvで使用するための修正
danielrsmithの答えは、virtualenvを使用していないときに機能しますが、virtualenvはpython実行可能ファイルのコピーを作成するため、動作しません:
$ which python
/Users/cogg/.virtualenvs/tweakeats/bin/python
$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807
これはPythonのコピーであるため、リポを使用して64ビットアーキテクチャを削除しました。これにより、32ビットpython 2.6をvirtualenvで使用できます。
$ lipo -info /Users/cogg/.virtualenvs/tweakeats/bin/python
Architectures in the fat file: /Users/cogg/.virtualenvs/tweakeats/bin/python are: x86_64 i386 ppc7400
$ mv /Users/cogg/.virtualenvs/tweakeats/bin/python /Users/cogg/.virtualenvs/tweakeats/bin/python.old
$ lipo -remove x86_64 /Users/cogg/.virtualenvs/tweakeats/bin/python.old -output /Users/cogg/.virtualenvs/tweakeats/bin/python
$ python
[...]
>>> import sys
>>> sys.maxint
2147483647
答えは受け入れられました。しかし、3番目の質問にはまだ回答がないと思います。私はそれが興味深い質問であることがわかったので、同じことについていくつかの研究を行いました。別のSOフォーラム-
SnowLeopardは、32ビットのIntelマシンで32ビットのシステムソフトウェアとアプリケーションを実行し、64ビットのIntelマシンで64ビットのシステムソフトウェアと32ビットおよび64ビットのアプリケーションを実行します。 Snow Leopardのデスクトップバージョンは、kextとドライバーの互換性のために32ビットカーネルを起動しますが、すべてのユーザースペースは64ビットで実行されます。 Mac OS X Serverは、64ビットカーネルで起動します。 Core 2 Duoは64ビットマシンです。 $ sysctl hw.cpu64bit_capableまたはsysctl hw.optional.x86_64を試して、64ビットCPUがあることを確認します。 Archは、LeopardとSnow Leopardの両方のIntelハードウェアでi386を常に表示します。 -cdespinosa 09年9月22日4:23で
3番目の質問は32/64ビットカーネルに関するものです
64ビット対応のOSと64ビット対応のCPUプロセッサを持っているからといって、Mac OSXで64ビットカーネルを起動しているわけではありません
工場から10.6ユキヒョウを搭載したMacを入手した場合、デフォルトで32ビットモードで出荷されました。
64ビットモードで起動するには、システム設定を編集する必要があります
(私が使用している最新のものはsnow leoなので、10.7または10.8への変更についてはわかりませんが、工場出荷時のデフォルトで64ビットカーネルを起動する可能性があると思います)
10.6-ターミナルから次のコマンドを実行します:
:*Sudo nvram boot-args="Arch=x86_64"
OR
10.6-ターミナルから次のコマンドを実行します:
Sudo defaults write /Library/Preferences/SystemConfiguration/com.Apple.Boot 'Kernel Flags' 'Arch=x86_64'
上記の提案のいくつかを試してみたところ、膨大な量の試行錯誤の後、私は次のシンボリックリンクを見つけました。
_/usr/local/bin/python2-32
_
を指しています:
_/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32
_
そして、このPythonを実行すると、32ビットモードで起動します(_/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
_とは対照的)。これは、アクティビティモニターで確認できます。
注:他の人が指摘しているように、platform.architecture()
は常に良い指標ではありません。この32ビットプロセスでは'64ビット 'を示しています。
Skype4Pyテストスクリプトを実行するさまざまな方法を試しました。
Arch -i386
最後に働いたのは、pythonの主張された64ビットバージョンのセグメンテーションフォールトパスを見て、それをヘッダーファイルに置くことでした:#!/ System/Library/Frameworks/Python.framework /バージョン/2.7/Resources/Python.app/Contents/MacOS/Python
この行を一番上に置き、ファイルに実行権限を追加したら、Arch -i386 skype.pyを使用できます
そして、問題なく実行されます。