首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中进口pygrib

从python中进口pygrib
EN

Stack Overflow用户
提问于 2017-09-11 05:23:32
回答 1查看 1.3K关注 0票数 0

尽管在pygrib安装中没有遇到任何错误,但在导入pygrib时遇到了以下错误:

代码语言:javascript
复制
>>> import pygrib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /python/python-2.7.13/lib/python2.7/site-packages/pygrib.so: undefined symbol: __svml_round2_mask

对于什么会导致这个“未定义的符号”错误,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 19:31:14

未定义的符号错误通常是由以下两种原因之一引起的:

  • 生成过程中不正确的链接,或
  • 用于构建二进制或库的环境与运行它的环境之间的不匹配。

不正确链接

如果您正在构建pygrib模块本身,请确保所需的库依赖项正在按正确的顺序正确链接。基于缺少的符号名__svml_round2_mask,我想您的pygrib.so是用Intel icc C编译器编译的,需要链接到包含icc函数的数学库。如果不了解构建环境的更多细节,就很难得到更具体的信息,但例如,在linux上,iccgcc (它们都将GNU ld称为链接)都需要在它们的命令行中指定这个数学库,并且它需要遵循调用它的二进制或库。

环境失配

如果pygrib不是由您构建的(显式的,或者作为pipconda安装命令的一部分),那么您可能存在环境不匹配。当您下载的pygrib.so是针对与您安装的库不同的库构建时,就会发生这种情况。理想情况下,所有Python二进制包都是针对一组非常普通的库构建的(例如,用于linux轮子的"manylinux1“容器),这样它们就可以在大多数系统上运行,但有时需要通过特定的优化或针对不常见的库来构建专门的和性能关键的包。如果这些优化或库在生成系统和安装结果包的系统之间不匹配,则可能会导致undefined symbol错误。

尽量减少这种情况的一种方法是在可能的情况下不要混合和匹配包存储库。也就是说,如果您正在使用Anaconda,只需从Anaconda中提取包。我知道,不总是可能的,对吧?

如果您在linux上,有时可以通过使用ldd命令找出不匹配的位置,例如:

$ ldd -r /python/python-2.7.13/lib/python2.7/site-packages/pygrib.so

您将看到一堆以Py_Py开头的未定义符号--忽略它们,它们是由Python本身提供的。但是在这些代码中,您可能会发现哪个特定的库需要__svml_round2_mask。仔细查看它的完整路径,以及列出的其他库的完整路径,这可能表明错配的来源。

其他建议

  • 在您的问题中包括更多的细节,例如您的操作系统以及您如何安装pygrib及其依赖项,可能会使我们能够提供更具体的建议。
  • 如果你问题的题目更具体,就会引起更多的注意。
  • 您试过其他pygrib包吗?Conda伪造列出了几个;其中一个可能与您的系统相匹配。
  • 你试过python-eccodes模块了吗?它似乎是吡咯烷酮的推荐接班人。

祝你好运,我希望这里有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46148672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档