我正在通过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-在没有或扩展名的情况下无法工作。

10-07 13:35