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

时间:2013-03-24 21:31:59

标签: python macos macports osx-leopard python-3.3

当我尝试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)。我的处理器是Core 2 Duo,它是64位。我该如何解决这个错误?

当我运行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 个答案:

答案 0 :(得分: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版本支持的架构之一。看起来好像你已经设法安装了Python 3.3的PowerPC版本。 (据推测它是通过Rosetta运行的。)

可能发生这种情况的一种方法是,如果您曾经在PowerPC G4计算机上安装了MacPorts,并且使用迁移助手将安装转移到新的Intel计算机上。请参阅主题的MacPorts FAQ

  

MacPorts适用于基于Intel和PowerPC的Mac,但默认情况下,您安装的端口仅针对您当前运行的架构进行编译。这意味着,如果您从PowerPC Mac迁移到Intel,并使用迁移助手将数据复制到新计算机,则应重新安装新计算机上的所有端口,以便为Intel重建它们。请参阅Migration了解如何让事情再次发挥作用。

(另外,您不需要使用lipofile实用程序会告诉您可执行文件或共享库中的体系结构。)