web-dev-qa-db-ja.com

Snow Leopardやその他の32ビット/ 64ビットの質問で、Pythonを32ビットにする)

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つの質問:

  1. どうやってそれを知りましたか?

  2. どうすればPythonを32ビットに変更できますか?異なるコンパイル設定で再コンパイルするよりも劇的なものですか?

  3. BashシェルからArchi386を返すのは、64ビットMacを実行しているプロセッサに基づいて知っているときに、「64ビットモード」ではないことを示すようです?

申し訳ありませんが、これらはすべて初心者向けの質問であり、32/64ビットの全体が私を怒らせており、これを容易にするコマンド/ツールがいくつかあると確信しています。

36
Bialecki
  1. Python実行しているバージョンはplatformモジュールで確認できます(sysモジュールにはいくつかの簡単なヘルパーもあります)

  2. Mac OS Xでは、たとえば、選択したアーキテクチャで「脂肪バイナリ」を実行できます。

    Arch -i386/usr/bin/python

not/usr/lib/python自体を(lipoコマンドで)変更することをお勧めします-システムファイルを改ざんすることで、システムを簡単に使用できなくすることができます。おそらく、システムを残したまま、別個のPython python.orgから(アプリケーションの目的のために)インストールするPython単独で許容される戦略です-それは間違いなくより安全ですシステムファイルの変更!-)

3番目の質問については、うーん、これは私にとっては困惑です-そして間違いなくsuperuser.comに対する質問です(また、Pythonとはまったく無関係であり、プログラミングとはまったく無関係のようです;-)。

30
Alex Martelli

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

24
danielrsmith

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
19
cogg

答えは受け入れられました。しかし、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で

元のリンク- Mac OSX 10.6コンパイラ:32ビットと64ビットの不可解な体験

6
Sumod

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'
0
hackg

上記の提案のいくつかを試してみたところ、膨大な量の試行錯誤の後、私は次のシンボリックリンクを見つけました。

_/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ビット 'を示しています。

0
Pyderman

Skype4Pyテストスクリプトを実行するさまざまな方法を試しました。

Arch -i386

最後に働いたのは、pythonの主張された64ビットバージョンのセグメンテーションフォールトパスを見て、それをヘッダーファイルに置くことでした:#!/ System/Library/Frameworks/Python.framework /バージョン/2.7/Resources/Python.app/Contents/MacOS/Python

この行を一番上に置き、ファイルに実行権限を追加したら、Arch -i386 skype.pyを使用できます

そして、問題なく実行されます。

0
elec3647