如何在 Snow Leopard 上强制 Python 为 32 位以及其他 32 位/64 位问题

2025-04-10 09:44:00
admin
原创
25
摘要:问题描述:当我从 Mac 上的 bash shell 运行以下命令时:$ file /usr/bin/python 我得到以下三行:/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/bin/pyth...

问题描述:

当我从 Mac 上的 bash shell 运行以下命令时:

$ file /usr/bin/python

我得到以下三行:

/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 已针对所有三种架构进行了编译,或者类似的东西?根据我在尝试设置 MySQL 时遇到的一些错误,我相信我使用的版本是 64 位版本。所以有两个问题:

  1. 我怎么会知道呢?

  2. 我怎样才能将 Python 改为 32 位?有没有比用不同的编译设置重新编译更温和的方法?

  3. 为什么arch从 bash shell 返回的i386信息似乎表明我没有处于“64 位模式”,而我根据我的处理器知道我正在运行 64 位 Mac?

抱歉,这些可能都是新手的问题,整个 32/64 位的事情让我很沮丧,我相信有一些命令/工具可以让这变得更容易。


解决方案 1:

  1. platform你可以通过该模块了解很多有关你正在运行的 Python 版本的信息(该sys模块还有一些简单的帮助程序)

  2. 在 Mac OS X 上,你可以使用你选择的架构运行“胖二进制文件”,例如,

arch-i386 /usr/bin/python

建议更改 /usr/lib/python 本身(使用lipo命令)——篡改系统文件很容易导致系统无法使用。也许从 python.org 安装单独的 Python(用于应用程序目的)而保留系统 Python 不变是一种可接受的策略——这绝对比更改系统文件更安全!-)

至于您的第三个问题,嗯,这个问题对我来说是一个难题——而且绝对是 superuser.com 的一个问题(不仅与 Python 完全无关,而且似乎与编程完全无关;-)。

解决方案 2:

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

解决方案 3:

修复了在 Snow Leopard 上使用 virtualenv 的问题

当我不使用 virtualenv 时,danielrsmith 的答案对我有用,但是 virtualenv 复制了 python 可执行文件,这导致它不起作用:

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

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

因为这是 python 的一个副本,所以我使用 lipo 删除了 64 位架构。这样我就可以在虚拟环境中使用 32 位 python 2.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

解决方案 4:

答案已被采纳。但我认为第三个问题仍未得到解答。我发现这是一个有趣的问题,因此做了一些研究。这是我在另一个 SO 论坛中找到的答案 -

SnowLeopard 在 32 位 Intel 机器上运行 32 位系统软件和应用程序,在 64 位 Intel 机器上运行 64 位系统软件和 32 位和 64 位应用程序。出于 kext 和驱动程序兼容性的原因,Snow Leopard 的桌面版本启动 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 2009 年 9 月 22 日 4:23

原文链接 - Mac OSX 10.6 编译器:32 位与 64 位的难解体验

解决方案 5:

第三个问题与 32 / 64 位内核有关

仅仅因为你有一个 64 位操作系统和 64 位 CPU 处理器并不意味着你在 Mac OSX 中启动了一个 64 位内核

如果你的 Mac 出厂时安装了 10.6 snow lepard,那么它默认采用 32 位模式

您必须编辑系统设置才能启动 64 位模式

(不确定 10.7 或 10.8 是否有变化,因为我使用的最新版本是 snow leo,但我相信它们可能在出厂时默认启动 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'

解决方案 6:

我尝试了许多不同的方法来执行 Skype4Py 测试脚本,

arch -i386

最终有效的方法是查看声称的 64 位版本 python 的段错误路径,并将其放在我的头文件中:#!/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python

在我把这一行放在顶部并为我的文件添加执行权限后,我可以使用 arch -i386 skype.py

并且它可以顺利运行。

解决方案 7:

经过大量的反复尝试,尝试了上述一些建议后,我偶然发现了以下符号链接:

/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 位”。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用