导入正则表达式时出现“mach-o,但架构错误”

0 投票
1 回答
3535 浏览
提问于 2025-04-17 20:10

我在尝试 import regex 时遇到了以下错误。

Traceback (most recent call last):
  File "app.py", line 3, in <module>
    import regex 
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/regex.py", line 391, in <module>
    import _regex_core
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex_core.py", line 21, in <module>
    import _regex
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so: mach-o, but wrong architecture

我通过 macports 安装了 python33,然后用 sudo python setup.py install 安装了最新版本的 regex(由 Matthew Barnett 开发)。

我使用的是 Mac Os X Leopard(8.5)。我的处理器是 64 位的 Core 2 Duo。我该如何解决这个错误呢?

当我运行 lipo -info 时,我得到了:

Non-fat file: /opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so is architecture: i386

当我运行 lipo -info /opt/local/bin/python 时,结果是:

非胖文件:/opt/local/bin/python 的架构是:ppc7400

为什么 python 是 ppc7400 呢?

1 个回答

2

MacPorts 有自己为 Python 3.3 提供的 regex 库版本,那为什么不直接用这个,而要自己去编译呢?

$ sudo port install py33-regex
[...]
$ python3.3
Python 3.3.0 (default, Nov 23 2012, 10:26:01) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import regex
>>> regex.match(r'[a-z]+', 'abc123').group(0)
'abc'

ppc7400 架构更为人熟知的是 PowerPC G4,这也是你当前使用的 OS X 版本支持的架构之一。看起来你可能不小心安装了一个 PowerPC 版本的 Python 3.3。(推测它是通过 Rosetta 运行的。)

这种情况可能发生在你之前在一台 PowerPC G4 机器上安装过 MacPorts,然后通过迁移助手把安装转移到了新的 Intel 机器上。关于这个问题,可以查看 MacPorts 常见问题解答

MacPorts 可以在 Intel 和 PowerPC 的 Mac 上运行,但默认情况下,你安装的端口只会为你当前使用的架构编译。这意味着如果你从一台 PowerPC Mac 迁移到 Intel Mac,并使用迁移助手把数据复制到新机器上,你应该在新机器上重新安装所有的端口,以便为 Intel 重新编译。有关如何让一切恢复正常,请参见 迁移

(另外,你不需要使用 lipofile 工具可以告诉你一个可执行文件或共享库的架构信息。)

撰写回答