如何在Mac OS X上安装numpy和scipy?

6

我是新手使用Mac,请多包涵。

目前我正在使用雪豹10.6.4。

我想安装numpy和scipy,所以我从官方网站下载了python2.6、numpy和scipy的dmg文件。然而,我在导入numpy时遇到了问题:

Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/numpy/core/multiarray.so: no matching architecture in universal wrapper

有人能解决这个问题吗?


请使用 Chris Fonnesbeck 的 SciPy Superpack 安装脚本。 - ismail
8个回答

8
似乎你正在尝试从64位Python中使用32位库。看起来有一个非官方的针对Snow Leopard的64位Numpy可用。
编辑:Python 2.6的.dmg可在此处 下载,该版本为32位。 (具体来说,它是一个通用二进制文件,包含i386和ppc版本)。numpy和scipy常规.dmg版本也是如此,可在此处 下载。 (我怎么知道?请见下文!)因此,如果您同时使用这些版本,应该没有问题。
但是,您并不好 - 所以我猜测您没有使用从您下载的2.6 .dmg中获取的Python版本。 如果您正在运行可执行的python脚本,例如:
$ ./my-script.py

如果您想明确指定使用的Python版本,请尝试在命令行上显式指定。看起来MacPython .dmg安装到/usr/local/bin/python,所以尝试:

$ /usr/local/bin/python2.6 myscript.py

有进展了吗?


我如何确定那些 .dmg 文件的架构内容是如何构建的...
  1. Mount the .dmg (i.e. double-click it to open a volume)
  2. Use gunzip and pax to unpack the package contents to a local directory, e.g.:

    $ mkdir tmp
    $ cd tmp
    $ gunzip -c /Volumes/Universal\ MacPython\ 2.6/MacPython.mpkg/Contents/Packages/PythonUnixTools-2.6.pkg/Contents/Archive.pax.gz | pax
    
  3. Use file to examine binary files in the package contents

    $ file Versions/2.6/bin/python
    Versions/2.6/bin/python: Mach-O universal binary with 2 architectures
    Versions/2.6/bin/python (for architecture ppc): Mach-O executable ppc
    Versions/2.6/bin/python (for architecture i386):    Mach-O executable i386
    

Python.org 的 Python 安装程序不是以 32 位为基础构建的吗? - goh
即使python.org的安装程序是32位的,OS X自带的python很可能是64位的。 - Velociraptors

7
当我在Mac OSX 10.6.8上尝试使用新安装的python2.7中的numpy和scipy时,出现了相同的错误信息。后来我发现有两个针对python2.7的.dmg文件:
  • numpy-1.6.2-py2.7-python.org-macosx10.3.dmg
  • numpy-1.6.2-py2.7-python.org-macosx10.6.dmg
是10.3.dmg中的包导致了关于multiarray.so的错误信息。安装10.6.dmg中的那个后,我消除了这个错误信息。

3

直到我在虚拟环境中安装了numpy,我才解决了问题,现在没有任何问题。我强烈建议尝试这种方法。


1

对于雪豹64位系统,我使用了以下的命令 http://blog.hyperjeff.net/?p=160 只需执行即可。 还要看一下评论(新的AMD...)

构建numpy总是有效的。但是对于scipy,您需要提供numpy配置文件。 安装gfortran......


0
我花了无数小时浏览网络,试图让各种Python包在OS X中工作。 最终,我发现最简单的解决方案是完全切换到Ubuntu或从OS X内部运行Virtualbox中的Ubuntu(全部免费)。
使用Ubuntu的软件包管理器apt-get,在一个简单的安装命令后,几乎任何你想要的软件包都可以立即使用。第一次在不到一分钟内成功运行numpy、scipy和matplotlib时,我感到非常兴奋。
$ sudo apt-get install python-numpy python-scipy python-matplotlib

每次我这样做时,我仍然会感到一阵小小的兴奋。不确定你想要的模块是否有 Debian 包?通常是有的,你可以搜索,比如说 Python 的 lxml 模块:
$ apt-cache search lxml | grep python

0

在 OS X 上管理软件包的最佳方式是使用 Fink(而不是 MacPorts :))。它们对 Python、NumPy 和 SciPy 的支持非常好。

为什么要使用软件包管理器?因为你不仅可以获得 NumPy 和 SciPy,还可以获得许多其他你不可避免需要的程序,所有这些都可以通过一个入口点(基本上是管理器的安装命令)来实现。这比必须寻找你想要安装的特定编译版本的程序要方便得多。

为什么选择 Fink?因为据说 Fink 比 MacPorts 更稳定,并且有更多的软件包。


1
实际上,在OS X上管理软件包的最佳方式是Homebrew(而不是Fink或MacPorts :)) - 不幸的是,目前Homebrew列表中既没有NumPy也没有SciPy。 :) - Simon Whitaker
哇,我真的不知道在OS X包管理器上竟然有这么激烈的竞争。(我刚刚遭到了我有史以来的第一个负评!)你知道Fink和MacPorts能否和平共处,让我可以稍微尝试一下吗? - Josh Bleecher Snyder
@Josh:我猜你可以同时安装MacPorts和Darwin软件包:据我所知,Fink会将所有内容安装在专用的/sw目录中。 - Eric O. Lebigot
1
MacPorts和Fink软件包之间没有直接冲突,因为它们默认安装在不同的根目录下,分别是/opt/local//sw。但是,在其中一个或两个软件包中都有一些可用的软件包,其香草安装过程试图聪明地查找MacPorts和Fink默认位置中的第三方库,并且可能没有被MacPorts或Fink定制以防止这种情况发生,这可能导致软件包使用来自错误包管理器的不匹配库并因不兼容的构建选项(archs等)而执行失败。 - Ned Deily
因此,通常不建议同时从多个软件包管理器(或自己从源代码安装到 /usr/local)安装相同的软件包或软件包依赖项。除非您确实知道自己在做什么,否则一次只使用一个软件包管理器。 - Ned Deily
显示剩余2条评论

0

不需要使用MacPorts或Fink。

使用Python 2.6安装程序此Numpy安装程序。我认为您需要先安装Numpy,然后安装Scipy,一切都会自动工作。我记得有一段时间,我需要明确地将路径添加到我的脚本顶部的site-packages目录,以便Python知道在哪里查找。


你列出的错误是由哪段代码引起的?之前你是否尝试过自己构建这些包中的任何一个?你可能需要彻底删除site-packages中的numpy和scipy文件夹,然后再试一次。 - Benjamin

0
如果有用的话,我也遇到了在OSX上安装numpy二进制文件的问题。安装程序告诉我:
“You cannot install numpy 1.5.1 on this volume. numpy requires System Python 2.6 to install.”
“System Python” 意思是 “来自 python.org 的 python”,“2.6”意味着真的是2.6,不是2.5也不是2.7。所以,去找到numpy需要的python版本的安装程序,然后一切都好了。
第一次尝试时,我误解了numpy的错误消息,认为我的Python版本已经过时了,于是我下载了最新版本(当时是2.7),但numpy仍然继续抱怨。只有在仔细阅读消息后,我才明白它真正想要的是2.6而不是其他任何版本。 我删除了第一个安装程序(位于 /Library/Frameworks/Python.framework 中),然后安装了2.6。 最后,numpy可以愉快地安装,一切都很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接