37

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. プロセッサに基づいて 64 ビット Mac を実行していることがわかっているのにarch、bash シェルから、 「64 ビット モード」ではないことを示すように見えるのはなぜですか?i386

申し訳ありませんが、これらはおそらくすべて初心者の質問です.32/64ビット全体が私のがらくたを苛立たせています.これを簡単にするコマンド/ツールがいくつかあると確信しています.

4

7 に答える 7

30
  1. モジュールを介して、実行している Python のバージョンについて多くのことを知ることができますplatform(sysモジュールにはいくつかの単純なヘルパーもあります) 。

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

    arch -i386 /usr/bin/python

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

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

于 2010-01-18T19:21:54.400 に答える
24

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

于 2010-01-18T19:18:13.440 に答える
19

SnowLeopardのvirtualenvで使用するための修正

danielrsmithの答えは、virtualenvを使用していないときに機能しますが、virtualenvはpython実行可能ファイルのコピーを作成するため、機能しません。

$ which python
/Users/cogg/.virtualenvs/tweakeats/bin/python

$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807

これはPythonのコピーであるため、64ビットアーキテクチャを削除するためにlipoを使用しました。これにより、virtualenvで32ビットのpython2.6を使用できるようになります。

$ 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
于 2010-06-17T05:33:01.847 に答える
6

答えは受け入れられました。しかし、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 22 9月. 092009-09-22 04:23:00

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

于 2011-07-01T18:10:21.177 に答える
0

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

arch -i386

最終的にうまくいったのは、要求された 64 ビット バージョンの Python の segfault パスを調べ、それをヘッダー ファイルに入れることでした: #!/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app /目次/MacOS/Python

この行を先頭に置き、ファイルに実行権限を追加した後、arch -i386 skype.py を使用できます。

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

于 2013-08-08T15:58:50.570 に答える
0

上記の提案のいくつかを自分で試行錯誤した後、次のシンボリックリンクに出くわしました。

/usr/local/bin/python2-32

を指しています:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32

そして、この Python を実行すると、( とは対照的に/Library/Frameworks/Python.framework/Versions/2.7/bin/python2) 32 ビット モードで起動することがわかりました。これは、アクティビティ モニターで確認できます。

注: 他の人が他の場所で指摘しているように、platform.architecture()常に良い指標とは限りません。この 32 ビット プロセスに対して「64 ビット」と表示されています。

于 2016-01-15T16:07:50.653 に答える
0

3 番目の質問は、32/64 ビット カーネルに関するものです。

64 ビット対応の OS と 64 ビット対応の CPU プロセッサを使用しているからといって、Mac OSX で 64 ビット カーネルを起動しているわけではありません。

工場出荷時に 10.6 Snow Leopard を搭載した Mac を入手した場合、デフォルトで 32 ビット モードで出荷されます。

64ビットモードで起動するには、システム設定を編集する必要があります

(私が使用する最新のものは Snow leo であるため、10.7 または 10.8 への変更についてはわかりませんが、工場出荷時のデフォルトで 64 ビット カーネルを起動する可能性があると思います)

10.6 - ターミナルから次のコマンドを実行します。

 :*sudo nvram boot-args="arch=x86_64"

また

10.6 - ターミナルから次のコマンドを実行します。

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.Boot 'Kernel Flags' 'arch=x86_64'
于 2012-11-07T17:15:06.130 に答える