我正在通过extractor
在python 2.7中使用pip install extractor
模块。我在OS X上使用自制软件,并且以前运行过homebrew install libextractor
。这将在/ usr / local / lib中创建扩展名为.a和.dylib的文件。 (GNU libextractor)
在extractor.py的第36行周围,有以下代码:
尝试:
#加载共享对象文件
libextractor = cdll.LoadLibrary('libextractor.so.3')
除了OSError:
libextractor = cdll.extractor
尝试从python shell中OSError: dlopen(extractor, 6): image not found
时出现import extractor
。
这似乎是因为我没有.so.3文件,并且在模块中进行了硬编码。但是错误来自except块,而不是try块。
这个错误是由于libextractor.so.3的硬编码引起的吗?如果是,我如何告诉python加载正确的库?我尝试用确实存在的各种文件(.a,.dylib)替换该值,但是没有运气。
最佳答案
如果可行,则应使用ctype.CDLL(“ libextractor”)并让ctypes确定正确的扩展名。遗憾的是,不存在特定于OS的扩展魔术。ctypes
提供find_library
方法,如果可行,请使用它。可悲的是,它依赖于外部程序,这意味着在小型或怪异的系统上运行时会遇到故障。
other projects went ahead and hardcoded extension基于os.uname()。如果需要,可以这样做。
附言else子句是一些怪异的解决方法,实际上ctypes.cdll.foo
等同于ctypes.cdll.__getattr__("foo")
,与ctypes.CDLL("foo")
相同,而lib-
在没有或扩展名的情况下无法工作。