SWIG生成无效的Python包装代码

2024-09-29 19:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用SWIG生成Python包装器时,有时会出现wierd问题。swig2.x和3.x版本都会发生这种情况。我不知道是什么触发了它,但有时在代码重构之后,会出现这个错误。你知道吗

问题是SWIG生成的代码不是有效的Python,而是某种伪代码。例如

class SwigPyIterator(_object):

    ... note that method definitions are not Python:

    def value(self) -> "PyObject *" : return _vabamorf.SwigPyIterator_value(self)
    def incr(self, n : 'size_t'=1) -> "swig::SwigPyIterator *" : return _vabamorf.SwigPyIterator_incr(self, n)
    def decr(self, n : 'size_t'=1) -> "swig::SwigPyIterator *" : return _vabamorf.SwigPyIterator_decr(self, n)

我正在使用setuptools,下面是与SWIG相关的行:

swigging estnltk/pyvabamorf/vabamorf.i to estnltk/pyvabamorf/vabamorf_wrap.cpp
swig -python -c++ -py3 -o estnltk/pyvabamorf/vabamorf_wrap.cpp estnltk/pyvabamorf/vabamorf.i

有人知道,是什么触发了这种行为,以及如何修复它吗?我在过去已经能够解决这个问题,但我从来没有能够追踪到具体的变化,使这个问题消失。你知道吗


Tags: 代码selfsizereturnvaluedefswigwrap
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:33

大师把新手转向门口,一只支持他的手放在肩膀上说:“年轻的新手,去读他妈的手册。”于是新手开悟了。

好吧,这是一个愚蠢的用户错误。 这实际上是预期的行为,这个伪代码实际上是function annotations。你知道吗

它也记录在SWIG documentation

The -py3 option will enable function annotation support. When used SWIG is able to generate proxy method definitions like this:

  def foo(self, bar : "int" = 0) -> "void" : ...

我似乎把自己搞糊涂了,没有在Python2/Python3编译之间清理所有文件,而且在重构过程中引入了一些与导入相关的错误。你知道吗

该死,我已经很久没给自己这么多惊喜了。你知道吗

相关问题 更多 >

    热门问题