2

OSX には、32 ビット コードのみを含む Python ユニバーサル バイナリがあります。

$ file $(python3.2-32)
/Library/Frameworks/Python.framework/Versions/3.2/bin/python3.2-32: Mach-O universal binary with 1 architecture
/Library/Frameworks/Python.framework/Versions/3.2/bin/python3.2-32 (for architecture i386): Mach-O executable i386

このバイナリを使用して virtualenv を作成します。

$ virtualenv -p python3.2-32 myenv
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.2/bin/python3.2-32
New python executable in myenv/bin/python
Please make sure you remove any previous custom paths from your /Users/jhartley/.pydistutils.cfg file.
Installing distribute........................................................................................................................................................................done.
Installing pip...............done.

しかし、virtualenv には 32 ビット コードと 64 ビット コードの両方のバイナリが含まれています。

$ . myenv/bin/activate
(myenv)$ file $(which python)
/Users/jhartley/myenv/bin/python: Mach-O universal binary with 2 architectures
/Users/jhartley/myenv/bin/python (for architecture i386):   Mach-O executable i386
/Users/jhartley/myenv/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64

64 ビットではなく、32 ビット コードのみを含む Python バイナリを使用する必要があります。

このアプリケーションの起動方法を制御できないため、「arch -i386」を使用して起動する必要がなく、デフォルトで32ビットモードで実行される限り、ユニバーサルバイナリであることは気にしません.

4

1 に答える 1

3

この動作が発生する理由は正確にはわかりませんが、回避策を提供できます。virtualenv の python を i386 に 1 回だけ削除することができます。次に、32 ビットを保証するために環境フラグを必要としなくなります。

source bin/activate
file `which python`
# .../bin/python: Mach-O universal binary with 2 architectures
# .../bin/python (for architecture i386):   Mach-O executable i386
# .../bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
lipo -thin i386 `which python` -output `which python`
file `which python`
# .../bin/python: Mach-O executable i386
于 2012-06-11T00:27:35.347 に答える