Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSX上的Virtualenv使用的通用Python二进制文件与我指定的仅32位Python二进制文件不同_Python_Macos_32bit 64bit_Virtualenv_Universal Binary - Fatal编程技术网

OSX上的Virtualenv使用的通用Python二进制文件与我指定的仅32位Python二进制文件不同

OSX上的Virtualenv使用的通用Python二进制文件与我指定的仅32位Python二进制文件不同,python,macos,32bit-64bit,virtualenv,universal-binary,Python,Macos,32bit 64bit,Virtualenv,Universal Binary,在OSX上,我有一个Python通用二进制文件,它只包含32位代码: $ 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 architec

在OSX上,我有一个Python通用二进制文件,它只包含32位代码:

$ 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
$ . 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
我使用以下二进制文件创建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
我需要使用一个Python二进制文件,它只包含32位代码,而不是64位代码


我不介意它是一个通用二进制文件,只要它在默认情况下以32位模式运行,而不必使用“arch-i386”调用它,因为我无法控制这个应用程序的启动方式。

我不太清楚为什么会发生这种行为,但我可以提供一种解决方法。您只需将virtualenv的python剥离到i386即可。这样就不再需要环境标志来确保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

发生这种情况的原因是,对于OSX框架构建,
virtualenv
从框架
bin
目录复制实际的Python可执行文件(位于框架中的Python.app包中),而不是存根启动器二进制文件(在本例中,是精简的i386-only启动器)。虚拟环境功能,
venv
被添加到python3.3的标准库中,它正确地实现了这一点:
python3.3-32-m venv-myenv
@neddenly:感谢您提供的信息!这绝对是一个可靠的解释。感谢修复,它按照描述工作,并感谢@Ned的洞察力。