【问题标题】:Virtualenv on OSX uses a different universal Python binary than my specified 32-bit only Python binaryOSX 上的 Virtualenv 使用与我指定的仅 32 位 Python 二进制文件不同的通用 Python 二进制文件
【发布时间】:2012-06-13 22:54:45
【问题描述】:

在 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

我使用这个二进制文件创建了一个 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

我需要使用仅包含 32 位代码而不是 64 位代码的 Python 二进制文件。

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

【问题讨论】:

    标签: python macos 32bit-64bit virtualenv universal-binary


    【解决方案1】:

    我不确定为什么会发生这种行为,但我可以提供一种解决方法。您可以一次将 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
    

    【讨论】:

    • 发生这种情况的原因是,对于 OS X 框架构建,virtualenv 复制实际的 Python 可执行文件(位于框架中的 Python.app 包中)而不是存根启动器二进制文件(在在这种情况下,精简的 i386-only 启动器)来自框架bin 目录。虚拟环境功能,venv 在 Python 3.3 中被添加到标准库中得到了正确的结果:python3.3-32 -m venv myenv
    • @NedDeily:感谢您提供的信息!这绝对是一个可靠的解释。
    • 感谢修复,如前所述,感谢@Ned 提供的见解。
    猜你喜欢
    • 2011-08-13
    • 2011-09-08
    • 2015-02-20
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多