安装numpy导致NLTK失效(OS X 10.6.2,Python 2.6)

0 投票
3 回答
1237 浏览
提问于 2025-04-15 18:48

我在我的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。

撰写回答