无法在Anaconda / Python3

时间:2016-12-14 22:18:12

标签: python anaconda libclang

我只是将已安装的clang pip安装到我的Anaconda Python 3安装中,而且我无法导入clang python绑定...

C:\Temp>python -m pip install clang --proxy="xxxxx"
Collecting clang
  Downloading clang-3.8.tar.gz
Building wheels for collected packages: clang
  Running setup.py bdist_wheel for clang ... done
  Stored in directory: C:\xxxxxx
Successfully built clang
Installing collected packages: clang
Successfully installed clang-3.8

C:\Temp>python
>>> import clang.cindex
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Anaconda3\lib\site-packages\clang\cindex.py", line 515
        raise ValueError,'{0} value {1} already loaded'.format(
                        ^
    SyntaxError: invalid syntax

然而,我能够成功地导入clang,虽然没有任何有用的东西......

>>> import clang
>>> clang.
clang.__all__           clang.__loader__        clang.__spec__          clang.__dir__(          clang.__getattribute__( clang.__le__(           clang.__reduce__(       clang.__sizeof__(
clang.__cached__        clang.__name__          clang.__class__(        clang.__eq__(           clang.__gt__(           clang.__lt__(           clang.__reduce_ex__(    clang.__str__(
clang.__doc__           clang.__package__       clang.__delattr__(      clang.__format__(       clang.__hash__(         clang.__ne__(           clang.__repr__(         clang.__subclasshook__(
clang.__file__          clang.__path__          clang.__dict__          clang.__ge__(           clang.__init__(         clang.__new__(          clang.__setattr__(

查看抛出异常的源文件似乎表明它可能是Python3语法问题......

### Cursor Kinds ###
class BaseEnumeration(object):
    """
    Common base class for named enumerations held in sync with Index.h values.

    Subclasses must define their own _kinds and _name_map members, as:
    _kinds = []
    _name_map = None
    These values hold the per-subclass instances and value-to-name mappings,
    respectively.

    """

    def __init__(self, value):
        if value >= len(self.__class__._kinds):
            self.__class__._kinds += [None] * (value - len(self.__class__._kinds) + 1)
        if self.__class__._kinds[value] is not None:
            raise ValueError,'{0} value {1} already loaded'.format( #<--Py2 Syntax                    str(self.__class__), value)
        self.value = value
        self.__class__._kinds[value] = self
        self.__class__._name_map = None

查看cindex.py的其余部分似乎一致,即尚未为Python3开发libclang绑定。这是准确的还是我的点子或其他东西在安装过程中混淆了?

2 个答案:

答案 0 :(得分:1)

看起来这是一个Py2 / 3语法问题,幸运的是我能够在文件夹C:\Anaconda3\Lib\site-packages\clang上运行2to3.exe并合并修复

cindex.py diff results Python 2 vs 3 syntax changes from 2to3.exe

现在我在做生意......

>>> import clang.cindex
>>> clang.cindex.
clang.cindex.ARRAY(                    clang.cindex.LibclangError(            clang.cindex.__doc__                   clang.cindex.c_uint64(                 clang.cindex.set_last_error(
clang.cindex.AccessSpecifier(          clang.cindex.LibraryLoader(            clang.cindex.__file__                  clang.cindex.c_uint8(                  clang.cindex.sizeof(
clang.cindex.ArgumentError(            clang.cindex.LittleEndianStructure(    clang.cindex.__loader__                clang.cindex.c_ulong(                  clang.cindex.string_at(
clang.cindex.Array(                    clang.cindex.OleDLL(                   clang.cindex.__name__                  clang.cindex.c_ulonglong(              clang.cindex.util
clang.cindex.BaseEnumeration(          clang.cindex.POINTER(                  clang.cindex.__package__               clang.cindex.c_ushort(                 clang.cindex.windll
clang.cindex.BigEndianStructure(       clang.cindex.PYFUNCTYPE(               clang.cindex.__spec__                  clang.cindex.c_void_p(                 clang.cindex.wintypes
clang.cindex.CCRStructure(             clang.cindex.PyDLL(                    clang.cindex.addressof(                clang.cindex.c_voidp(                  clang.cindex.wstring_at(
clang.cindex.CDLL(                     clang.cindex.RTLD_GLOBAL               clang.cindex.alignment(                clang.cindex.c_wchar(                  clang.cindex.__class__(
clang.cindex.CFUNCTYPE(                clang.cindex.RTLD_LOCAL                clang.cindex.availabilityKinds         clang.cindex.c_wchar_p(                clang.cindex.__delattr__(
clang.cindex.CachedProperty(           clang.cindex.RefQualifierKind(         clang.cindex.byref(                    clang.cindex.callbacks                 clang.cindex.__dict__
clang.cindex.ClangObject(              clang.cindex.SetPointerType(           clang.cindex.c_bool(                   clang.cindex.cast(                     clang.cindex.__dir__(
clang.cindex.CodeCompletionResult(     clang.cindex.SourceLocation(           clang.cindex.c_buffer(                 clang.cindex.cdll                      clang.cindex.__eq__(
clang.cindex.CodeCompletionResults(    clang.cindex.SourceRange(              clang.cindex.c_byte(                   clang.cindex.clang                     clang.cindex.__format__(
clang.cindex.CompilationDatabase(      clang.cindex.SpellingCache             clang.cindex.c_char(                   clang.cindex.collections               clang.cindex.__ge__(
clang.cindex.CompilationDatabaseError( clang.cindex.StorageClass(             clang.cindex.c_char_p(                 clang.cindex.completionChunkKindMap    clang.cindex.__getattribute__(
clang.cindex.CompileCommand(           clang.cindex.Structure(                clang.cindex.c_double(                 clang.cindex.conf                      clang.cindex.__gt__(
clang.cindex.CompileCommands(          clang.cindex.TemplateArgumentKind(     clang.cindex.c_float(                  clang.cindex.create_string_buffer(     clang.cindex.__hash__(
clang.cindex.CompletionChunk(          clang.cindex.Token(                    clang.cindex.c_int(                    clang.cindex.create_unicode_buffer(    clang.cindex.__init__(
clang.cindex.CompletionString(         clang.cindex.TokenGroup(               clang.cindex.c_int16(                  clang.cindex.functionList              clang.cindex.__le__(
clang.cindex.Config(                   clang.cindex.TokenKind(                clang.cindex.c_int32(                  clang.cindex.get_errno(                clang.cindex.__lt__(
clang.cindex.Cursor(                   clang.cindex.TranslationUnit(          clang.cindex.c_int64(                  clang.cindex.get_last_error(           clang.cindex.__ne__(
clang.cindex.CursorKind(               clang.cindex.TranslationUnitLoadError( clang.cindex.c_int8(                   clang.cindex.memmove(                  clang.cindex.__new__(
clang.cindex.DEFAULT_MODE              clang.cindex.TranslationUnitSaveError( clang.cindex.c_long(                   clang.cindex.memset(                   clang.cindex.__reduce__(
clang.cindex.Diagnostic(               clang.cindex.Type(                     clang.cindex.c_longdouble(             clang.cindex.oledll                    clang.cindex.__reduce_ex__(
clang.cindex.DllCanUnloadNow(          clang.cindex.TypeKind(                 clang.cindex.c_longlong(               clang.cindex.pointer(                  clang.cindex.__repr__(
clang.cindex.DllGetClassObject(        clang.cindex.Union(                    clang.cindex.c_object_p(               clang.cindex.py_object(                clang.cindex.__setattr__(
clang.cindex.File(                     clang.cindex.WINFUNCTYPE(              clang.cindex.c_short(                  clang.cindex.pydll                     clang.cindex.__sizeof__(
clang.cindex.FileInclusion(            clang.cindex.WinDLL(                   clang.cindex.c_size_t(                 clang.cindex.pythonapi                 clang.cindex.__str__(
clang.cindex.FixIt(                    clang.cindex.WinError(                 clang.cindex.c_ssize_t(                clang.cindex.register_enumerations(    clang.cindex.__subclasshook__(
clang.cindex.FormatError(              clang.cindex._CXString(                clang.cindex.c_ubyte(                  clang.cindex.register_function(
clang.cindex.GetLastError(             clang.cindex._CXUnsavedFile(           clang.cindex.c_uint(                   clang.cindex.register_functions(
clang.cindex.HRESULT(                  clang.cindex.__all__                   clang.cindex.c_uint16(                 clang.cindex.resize(
clang.cindex.Index(                    clang.cindex.__cached__                clang.cindex.c_uint32(                 clang.cindex.set_errno(

答案 1 :(得分:0)

我常用于python2.7的'pip'如何成为python3的pip?

$ pip --version
pip 1.5.6 from /usr/lib/python3/dist-packages (python 3.4)

但是然后设置已经被python2.7运行,导致语法错误。魔法。

我打电话给同样的,只是确保ppi为python2.7:

pip2 install clang

并且效果很好。