【发布时间】:2013-09-25 21:03:33
【问题描述】:
我通过“sudo python setup.py install”从它的 svn#95 安装了 guppy 内存分析器。
看起来安装正确。
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
但我仍然无法导入它。 Guppy 的 Python 源代码会执行此导入,因此它应该会成功。
>>> 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 不知何故坏了?谢谢!
【问题讨论】:
-
是的,它可能已损坏,或为空,或完全有效的 ELF 共享对象,但用于错误的架构或平台,或者……如果你想从 Python 中测试它,你可以尝试,例如,
import ctypes; ctypes.CDLL('/usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so'),它将为您提供更多信息的回溯,包括dlerror输出,这可能会有所帮助。 -
非常感谢!原来只是错误的许可。我希望我可以在更好的错误消息上向 Python 提交错误。此外,setup.py 使所有人都能阅读 *.py 而不是 *.so
cdll.LoadLibrary('/usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so') OSError: /usr/local/lib/python2.7/dist-packages/guppy/heapy/heapyc.so: cannot open shared object file: Permission denied,这也有点奇怪 -
您应该发布您自己的答案(理想情况下是什么问题,您是如何发现它的,以及您是如何解决的)并接受它,以使未来的读者受益。 (如果你认为我做了大部分工作,我可以写一个答案,但实际上,我认为它属于你。)
-
我想要,但我的脑海中仍然缺少一个链接。我发现了一些关于 LD_LIBRARY_PATH 的帖子。我想知道为什么它在没有设置的情况下对我有用。 python27 更聪明吗?谢谢! link
-
完成。顺便说一句,您可以为此提交一个错误,但它会作为“已修复”而关闭,因为 3.1 中的新导入程序已经为您提供了更好的错误消息。 (嗯,我还没有测试过 3.1 是否有,但 3.3 有,而且是 3.1 中的导入程序重写使此类错误消息成为可能。)
标签: python python-2.7 import shared-libraries guppy