首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 27不能从guppy导入共享对象

Python 27不能从guppy导入共享对象
EN

Stack Overflow用户
提问于 2013-09-25 21:03:33
回答 1查看 1.5K关注 0票数 0

我通过“”从svn#95安装了内存分析器。

它看起来安装得很好。

代码语言:javascript
复制
yey@yey:/usr/local/lib/python2.7/dist-packages/guppy/heapy$ ls *.so *.py
AbstractAlgebra.py  ImpSet.py          Path.py         Remote.py  Use.py
Classifiers.py      __init__.py        pbhelp.py       RM.py      View.py
Console.py      Monitor.py         Prof.py         Spec.py
Doc.py          OutputHandling.py  RefPat.py       Target.py
heapyc.so       Part.py        RemoteConstants.py  UniSet.py

但我还是不能进口。古皮的Python源代码做了这个导入,所以它应该会成功。

代码语言:javascript
复制
>>> import guppy.heapy
>>> import guppy.heapy.heapyc
# trying /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so
# trying /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapycmodule.so
# trying /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.py
# trying /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.pyc
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named heapyc

我的问题是,Python显然尝试将文件导入到正确的位置。为什么失败了?是因为.so文件损坏了吗?还是我的ld.so.cache坏了?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 18:37:10

.so文件可能存在许多问题,可能导致这种情况--没有读取访问、损坏的文件、空文件、完全有效的库,但是对于错误的平台/体系结构,等等。更糟糕的是,.so本身可能很好,但它可能对存在上述任何问题的不同文件具有加载时间依赖性。

不幸的是,Python2.x导入程序没有告诉您实际遇到了哪个问题;您所能知道的是,由于某种原因,打开共享库的调用失败了。

值得注意的是,在3.1或更高版本中,您可能会得到一条更有用的错误消息,如下所示:

代码语言:javascript
复制
ImportError: dlopen(/usr/local/lib/python3.3/dist-packages/guppy/heapy/heapyc.so, 2): no suitable image found.  Did find:
    /usr/local/lib/python3.3/dist-packages/guppy/heapy/heapyc.so: Permission denied

然而,这是可能的,因为进口商从零开始重写为3.1,而这种根本的改变是不可能被支持到2.7。

大多数平台都提供了测试共享库的工具,这确实是诊断问题的最佳方法。

但是对于一个简单且独立于平台的测试,您只需使用Python本身附带的ctypes库:

代码语言:javascript
复制
>>> import ctypes
>>> ctypes.CDLL('/usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so')

您应该得到一个错误,如下所示:

代码语言:javascript
复制
OSError: /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so: cannot open shared object file: Permission denied

在这种情况下,文件是不可读的(或者,在需要共享库才能执行的平台上,它要么是不可读的,要么是不可执行的),这应该足以解决这个问题。因此,chmod a+r应该修复它(尽管您可能想进一步了解它为什么一开始就无法读懂)。

如果错误没有告诉你自己修复它,并且搜索没有帮助,那么至少你可以这样问一个问题,这个问题更有可能得到一个即时的答案--…

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

https://stackoverflow.com/questions/19015170

复制
相关文章

相似问题

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