在 Mac OS X 上安装 Pandas:ImportError (cannot import name hashtable)

Posted

技术标签:

【中文标题】在 Mac OS X 上安装 Pandas:ImportError (cannot import name hashtable)【英文标题】:Pandas installation on Mac OS X: ImportError (cannot import name hashtable) 【发布时间】:2013-01-12 03:32:45 【问题描述】:

我想从源代码构建 pandas 而不是使用包管理器,因为我有兴趣做出贡献。 第一次我尝试构建 pandas,这些是我采取的步骤:

1) 创建了 virtualenv mkvirtualenv --no-site-packages pandas

2) 激活 virtualenv

3) 安装了 Anaconda CE。但是,它是安装在 ~/anaconda 中的。

4) 克隆熊猫

5) 就地构建 C 扩展

(pandas)ems ~/.virtualenvs/pandas/localrepo/pandas> ~/anaconda/bin/python setup.py build_ext --inplace

6) 构建熊猫

(pandas)ems ~/.virtualenvs/pandas/localrepo/pandas> ~/anaconda/bin/python setup.py build

7) 在主分支上运行鼻子测试

测试失败: (pandas)ems ~/.virtualenvs/pandas/localrepo/pandas>鼻子测试熊猫 乙 ==================================================== ===================== 错误:失败:ValueError(numpy.dtype 的大小错误,请尝试重新编译) -------------------------------------------------- -------------------- 回溯(最近一次通话最后): 文件“/Users/EmilyChen/.virtualenvs/pandas/lib/python2.7/site-packages/nose/loader.py”,第 390 行,在 loadTestsFromName addr.filename,addr.module) 文件“/Users/EmilyChen/.virtualenvs/pandas/lib/python2.7/site-packages/nose/importer.py”,第 39 行,在 importFromPath return self.importFromDir(dir_path, fqname) 文件“/Users/EmilyChen/.virtualenvs/pandas/lib/python2.7/site-packages/nose/importer.py”,第 86 行,在 importFromDir mod = load_module(part_fqname, fh, 文件名, desc) 文件“/Users/EmilyChen/.virtualenvs/pandas/localrepo/pandas/pandas/init.py”,第 6 行,在 从 。导入哈希表、tslib、lib 文件“numpy.pxd”,第 156 行,在 init pandas.hashtable (pandas/hashtable.c:20354) ValueError: numpy.dtype 大小错误,尝试重新编译


在 0.001 秒内运行 1 次测试

失败(错误=1)

PyData 邮件列表中有人说:

看起来您在机器上的其他地方安装了 NumPy,而 AnacondaCE 在 vi​​rtualenv 中的播放效果不佳。您收到的错误是 Cython 错误消息,当它构建的 NumPy 版本与您系统上安装的版本不匹配时会出现 - 我曾认为 1.7.x 应该与 1.6.x 兼容(所以这不会发生)但我想不会。叹息

Anaconda CE 库中的 numpy 版本是 1.7.0b2,我的系统 numpy 安装版本是 1.5.1。 Setup.py 在构建 Pandas 时链接到 Anaconda 发行版库中的 numpy,但我的猜测是当 nosetests 运行 /pandas/init.py

时它链接到我的系统版本

接下来,我在 virtualenv 之外重复了这些步骤,但得到了同样的错误。 最后,我决定将所有依赖项安装在一个新的 virtualenv 中,而不是使用 Anaconda 发行版来构建 pandas。这样,我可以看到像 numpy 这样的依赖项驻留在 virtualenv python 安装的 lib 目录中,这在 pandas.init 运行 import 语句时是先例。这就是我所做的:

1) 使用 pip 安装 numpy、dateutil、pytz、cython、scipy、matplotlib 和 openpyxl

2) 就地构建 c 扩展

3) pandas 在此处安装输出:http://pastebin.com/3CKf1f9i

4) pandas 没有正确安装

(pandas)ems ~/.virtualenvs/pandas/localrepo/pandas> python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
 cannot import name hashtable
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/__init__.py", line 6, in <module>
from . import hashtable, tslib, lib
ImportError: cannot import name hashtable

我查看了this question,但在我的情况下安装了 cython,我正在尝试从源代码成功构建,而不是像推荐的答案那样使用 pip..

(pandas)ems ~/.virtualenvs/pandas/localrepo/pandas> which cython
/Users/EmilyChen/.virtualenvs/pandas/bin/cython

【问题讨论】:

我的第一个想法是调用你的 virtualenv pandas 是一个坏主意(我以前做过同样的事情,我认为它会混淆事情)。 hastables 失败的事实绝对意味着您没有正确构建 cython 文件,我认为这应该在构建 pandas 本身之后完成,因此请尝试再次运行该部分。 是的。不知何故,我从文档中错过了这一点:“请注意,如果您在源目录中打开解释器,除非您在适当的位置构建 C 扩展,否则您将无法导入熊猫”pandas.pydata.org/pandas-docs/stable/install.html 【参考方案1】:

在尝试从源代码目录导入 pandas 时,我收到了同样的错误 (ImportError: cannot import name hashtable)。尝试从不同的目录启动 python 解释器并再次导入 pandas。

【讨论】:

您的建议奏效了:导航到不同的目录后,我能够导入 pandas 并通过所有测试。谢谢!你和安迪都是对的。看来如果我在 pandas 源目录中启动解释器并导入 pandas,我需要在 pandas 构建之后就地构建 c 扩展。 在源码目录下不起作用是什么原因? 是的,即使我没有从源安装pandas(通过apt-get安装),我也无法导入pandas,因为我在pandas源所在的同一目录中(在知道之前下载恰当的方式)。但它不能从源目录工作的原因是什么? 在我的情况下,问题是通过在运行nosetests 之前运行python setup.py build_ext --inplace 解决的。另请参阅"Installing from source"。 @Seid.M @lucky1928 问题可能在于python. 放在任何其他位置以查找其模块之前。因此,如果您恰好位于 pandas 源代码树的顶部,则会首先使用它,因此会忽略已安装的版本。

以上是关于在 Mac OS X 上安装 Pandas:ImportError (cannot import name hashtable)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Mac OS X上安装 Ruby运行环境

如何在Mac OS X Yosemite上安装 jdk 1.6 开发环境

如何在Mac OS X上部署开发环境

markdown 在Mac OS X上安装Go

如何构建本机 Mac OS X 安装程序(在非 Mac 平台上)?

text 在Mac OS X上安装和配置tmux