安装numpy导致NLTK失效(OS X 10.6.2,Python 2.6)
我在我的Mac上(OS X 10.6.2)安装了一个可以正常工作的NLTK(py26-nltk)。然后我安装了numpy。现在当我尝试导入nltk时,出现了这个:
>>> import nltk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "nltk/__init__.py", line 83, in <module>
from collocations import *
File "nltk/collocations.py", line 39, in <module>
from nltk.metrics import ContingencyMeasures, BigramAssocMeasures, TrigramAssocMeasures
File "nltk/metrics/__init__.py", line 14, in <module>
from scores import *
File "nltk/metrics/scores.py", line 15, in <module>
from scipy.stats.stats import betai
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/stats/__init__.py", line 7, in <module>
from stats import *
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/stats/stats.py", line 203, in <module>
from morestats import find_repeats #is only reference to scipy.stats
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/stats/morestats.py", line 7, in <module>
import distributions
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/stats/distributions.py", line 27, in <module>
import vonmises_cython
File "numpy.pxd", line 30, in scipy.stats.vonmises_cython (scipy/stats/vonmises_cython.c:2939)
ValueError: numpy.dtype does not appear to be the correct type object
到底出了什么问题?我该怎么解决这个问题呢?
3 个回答
1
虽然我来得有点晚,但我在使用numpy和fisher的时候遇到了问题,这个问题出现在osx(雪豹系统上,不过我想在其他x86机器上也会出现)。
我通过pypm安装了fisher,并从一个二进制的dmg文件安装了numpy。在这种情况下,我猜某个地方可能混进了一个PowerPC的二进制文件,所以最好把这些文件清理掉,然后从源代码重新编译。
我手动从~/Library/...删除了这些文件,下载了源代码(包括scipy,反正也得处理这个),然后把这三者都从源代码重新编译了一遍,两个小时后系统就正常工作了。
1
我在Windows XP上用Python 2.6时遇到了同样的问题。根据mjv的建议,我先卸载了旧的SciPy模块,然后安装了最新版本。结果我遇到了一个错误,提示说缺少yaml模块。
在安装了PyYAML模块后,"import nltk"这条语句就没有再报错了。
希望这能帮助到其他遇到同样问题的人。
Atish
4
看起来问题主要是因为SciPy和NumPy版本不兼容,而不是NLTK和NumPy之间的兼容性问题。
虽然NLTK不需要SciPy,但它可以选择性地导入,如果有的话就会加载。
关于你遇到的情况,有几个猜测:
猜测 #1
- 你之前使用的是NumPy 1.3,并且安装了一个兼容的SciPy版本。
- 你最近安装了NumPy 1.4,但没有更新SciPy。
这就导致了“旧”的SciPy出现了问题。
解决办法:安装一个更新的SciPy,或者完全卸载它(不过根据你使用的NLTK模块,你可能在不知情的情况下需要SciPy)。
另外一个解决办法:把NumPy 1.4卸载,重新安装NumPy 1.3。
猜测 #2(可能性较小)
- 你之前没有安装SciPy,NLTK也能正常工作。
- 你最近安装了NumPy 1.4(替换了1.3),并且安装了SciPy(之前没有安装过)。
- 出于某种原因,NumPy和SciPy之间不太兼容。
解决办法:卸载SciPy。