为什么可以';这个python脚本找不到libclang dll吗?

为什么可以';这个python脚本找不到libclang dll吗?,python,clang,libclang,Python,Clang,Libclang,我想开始使用libclang和Python。我正在尝试获取一个示例代码(),用于Windows,下面是我尝试运行的代码的一部分: #!/usr/bin/python # vim: set fileencoding=utf-8 import sys import os import clang.cindex import itertools ... print("Setting clang path") # I tried multiple variations. Libclang is c

我想开始使用libclangPython。我正在尝试获取一个示例代码(),用于Windows,下面是我尝试运行的代码的一部分:

#!/usr/bin/python
# vim: set fileencoding=utf-8

import sys
import os
import clang.cindex
import itertools

...

print("Setting clang path")
# I tried multiple variations. Libclang is correctly installed in the specified location.
#clang.cindex.Config.set_library_path('C:/Program Files (x86)/LLVM/bin')
#clang.cindex.Config.set_library_path('C:/Program Files (x86)/LLVM/bin/libclang.dll')

# I also tried moving the dll into the Python installation folder.
clang.cindex.Config.set_library_file('C:/Python27/DLLs/libclang.dll')
print("Clang path set")

index = clang.cindex.Index.create()

...
我剥离了代码的所有其他部分,但如果它们相关,我可以发布它们。线路

index = clang.cindex.Index.create()
引发以下错误:

Setting clang path
Clang path set
Traceback (most recent call last):
  File "D:\libclangtest\boost_python_gen.py", line 60, in <module>
    index = clang.cindex.Index.create()
  File "D:\libclangtest\clang\cindex.py", line 2095, in create
    return Index(conf.lib.clang_createIndex(excludeDecls, 0))
  File "D:\libclangtest\clang\cindex.py", line 141, in __get__
    value = self.wrapped(instance)
  File "D:\libclangtest\clang\cindex.py", line 3392, in lib
    lib = self.get_cindex_library()
  File "D:\libclangtest\clang\cindex.py", line 3423, in get_cindex_library
    raise LibclangError(msg)
clang.cindex.LibclangError: [Error 193] %1 is not a valid Win32 application. To provide a path to libclang use Config.set_library_path() or Config.set_library_file().
设置叮当声路径
叮当路径集
回溯(最近一次呼叫最后一次):
文件“D:\libclangtest\boost_python_gen.py”,第60行,在
index=clang.cindex.index.create()
文件“D:\libclangtest\clang\cindex.py”,第2095行,在create中
返回索引(conf.lib.clang_createIndex(不包括decles,0))
文件“D:\libclangtest\clang\cindex.py”,第141行,在__
value=self.wrapped(实例)
文件“D:\libclangtest\clang\cindex.py”,第3392行,在lib中
lib=self.get\u cindex\u library()
文件“D:\libclangtest\clang\cindex.py”,第3423行,位于get_cindex_库中
raise LibclangError(msg)
clang.cindex.LibclangError:[错误193]%1不是有效的Win32应用程序。要提供libclang的路径,请使用Config.set\u library\u path()或Config.set\u library\u file()。
这是什么原因?我是否将dll的路径设置错误?我尝试了多种方法,使用前斜杠和后斜杠,我还尝试将dll移出程序文件,以使路径不包含空格,但没有任何效果


如果我问一些琐碎的问题,我完全是libclang和Python的初学者。

@SK logic评论说我应该检查Python和libclang是32位还是64位。Libclang是32位的,但是我找不到方法来检查我的Python安装是32位还是64位,所以我重新安装了32位版本,现在它可以工作了。所以问题可能是我使用了64位版本的Python。

我遇到了类似的问题(Windows 7 x64、Anaconda3 x64)。使用


解决了这个问题。请注意,您需要使用斜杠(而不是反斜杠),并指定bin/libclang.dll(而不是lib/libclang.dll)的路径。

确保python和libclang都是32位或64位。另外,请确保指向libclang.dll的路径位于path环境变量中。我已将其添加到路径中,但我认为这不是问题所在,因为我必须使用set_library_file函数手动设置其路径。我要检查它是32位还是64位,谢谢你的提示!您可以在Dependency Walker(Dependency.EXE)中打开EXE并检查它是32位还是64位。您可以通过多种方式检查CPython是32位还是64位,例如
platform.architecture()[0]
sys.version
字符串(MSC构建);
sys.maxsize
2**31-1
还是
2**63-1
;或者通过
struct.struct('P').size
ctypes.sizeof(ctypes.c\u void\u P)
来确定指针大小是4字节还是8字节。我也有类似的问题:我可以找到libclang.dll,但是,当我尝试创建索引时,我收到一个错误,表明找不到函数clang\u cxrecord\u isastract。我有Python3.6 64位、anaconda3 64位和Windows10,显然是64位。Llvm由anaconda安装。Python clang是6.0.0.2,clang——版本输出3.9.1。我很困惑。
clang.cindex.Config.set_library_file('C:/Program Files/LLVM/bin/libclang.dll')