OS X Lion上的SciPy

2 投票
1 回答
2261 浏览
提问于 2025-04-16 23:02

我正在尝试在 OS X Lion 上搭建我的 Python/Numpy/SciPy 开发环境。

我已经成功从最新的源代码版本编译了 Numpy 和 SciPy,使用的是常规的方法:

python setup.py build
python setup.py install

我使用的是从 python.org 下载的 Python 2.7.2 版本:

tobi-mbp:~ tobi$ python
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

但是当我导入 Numpy 时,它显示的是:

>>> import numpy
>>> numpy.__version__
'1.5.1'
>>> numpy.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/__init__.pyc'
>>> 

系统安装的 Numpy。而对于:

>>> import scipy
>>> scipy.__version__
'0.10.0.dev'
>>> scipy.__file__
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/__init__.pyc'
>>>

则显示已安装的 SciPy 版本。这意味着 scipy.test() 失败了,实际上还卡住了。

我也尝试过使用 pip 和 easy_install,但它们都无法编译 SciPy,Numpy 也出现了同样奇怪的情况。对于在 SourceForge 提供的预编译二进制文件也是如此。

这似乎是 PYTHONPATH 的问题:

>>> import sys, os, pprint
>>> pprint.pprint(sys.path)
['',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.19-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/Library/Python/2.7/site-packages/nose-1.1.2-py2.7.egg',
 '/Library/Python/2.7/site-packages/pip-1.0.2-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
 '/Library/Python/2.7/site-packages']
>>> pprint.pprint([p for p in os.environ.items() if p[0].startswith('PYTHON')])
[]
>>> 

还有 site-packages 的内容列表:

tobi-mbp:site-packages tobi$ ls -l
total 752
-rw-rw-r--   1 root  admin     119 12 Jun 00:25 README
drwxr-xr-x  10 root  admin     340  6 Aug 19:47 distribute-0.6.19-py2.7.egg
-rw-r--r--   1 tobi  admin     237  6 Aug 19:48 easy-install.pth
drwxrwxr-x  48 tobi  admin    1632  6 Aug 18:19 numpy
drwxrwxr-x   6 tobi  admin     204 20 Jul 20:44 numpy-1.6.1-py2.7.egg-info
-rw-r--r--   1 root  admin    1670  6 Aug 18:19 numpy-2.0.0.dev_26aa3cf-py2.7.egg-info
drwxr-xr-x   4 root  admin     136  6 Aug 19:48 pip-1.0.2-py2.7.egg
drwxr-xr-x   8 tobi  admin     272  6 Aug 19:48 readline-6.2.0-py2.7.egg-info
-rwxr-xr-x   1 tobi  admin  357048  6 Aug 19:48 readline.so
drwxrwxr-x  42 tobi  admin    1428  6 Aug 18:21 scipy
-rw-r--r--   1 root  admin    1768  6 Aug 18:21 scipy-0.10.0.dev-py2.7.egg-info
drwxrwxr-x   6 tobi  admin     204 27 Feb 14:00 scipy-0.9.0-py2.7.egg-info
-rw-r--r--   1 tobi  admin     144  6 Aug 19:47 setuptools-0.6c11-py2.7.egg-info
-rw-r--r--   1 tobi  admin      30  6 Aug 19:47 setuptools.pth

tobi-mbp:site-packages tobi$ more easy-install.pth
import sys; sys.__plen = len(sys.path)
./distribute-0.6.19-py2.7.egg
./pip-1.0.2-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

tobi-mbp:site-packages tobi$ more setuptools.pth 
./distribute-0.6.19-py2.7.egg

我在路径中看到了 System Extras 文件夹,现在的问题是为什么会有这个文件夹,以及我该如何去掉它。

谢谢你的帮助。

祝好,Tobi

1 个回答

2

看起来你遇到了路径的问题。也许你在设置 PYTHONPATH?当你运行 python.org 的 2.7.2 版本时,苹果自带的 Python 2.7.1 的 Extras 目录不应该出现在 sys.path 里。为了帮助你弄清楚发生了什么,启动 Python 2.7.2,然后检查以下内容:

>>> import sys, os, pprint
>>> pprint.pprint(sys.path)
>>> pprint.pprint([p for p in os.environ.items() if p[0].startswith('PYTHON')])

还有 site-packages 目录的内容:

$ cd /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
$ ls -l
$ more easy-install.pth

以及那里的其他 .pth 文件的内容。

如果还是不清楚发生了什么,请更新你的回答,展示上述的结果。

更新:

感谢你提供了请求的额外信息。这确认了 sys.path 确实包含了苹果自带的系统 Python 2.7 的 Extras 目录。没有明显的理由说明为什么会这样。没有更多的信息,我只能猜测。虽然这听起来不太可能,但我现在的最佳猜测是你不小心把一些文件从一个 Python 复制到了另一个。苹果自带的 Python 在 site.py 中有一个补丁,用来添加 Extras 目录:

$ cd /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
$ ls -l site.py
-rw-r--r--  1 root  wheel  19929 Jun 16 17:03 site.py
$ grep Extras site.py
            sitepackages.append(os.path.join(prefix, "Extras", "lib", "python"))

在 python.org 的 Python 中你不应该看到这个:

$ cd /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
$ ls -l site.py
-rw-rw-r--  1 root  admin  20288 Jun 11 15:25 site.py
$ grep Extras site.py
$

你也可以对 sys.path 上的所有目录进行更全面的递归搜索,找找 pth 文件,但这似乎不太可能找到什么。

你似乎还在你的 site-packages 中安装了两个版本的 numpyscipy,一个是最新发布的版本,另一个是前沿版本。我不知道你在安装之间是否清理了 numpy 和 scipy 的目录,或者这是否会导致问题,但可能会。

在这个时候,如果没有更多的信息,我建议你完全删除 2.7.2 的安装,然后重新开始:

$ sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7

你也可以考虑使用其他方法,比如二进制的 numpy/scipy 安装程序,或者使用 MacPorts 安装。你可以在 项目的邮件列表 上找到更好的建议。祝你好运!

撰写回答