gpt4 book ai didi

python - SWIG 生成无效的 Python 包装器代码

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:52 24 4
gpt4 key购买 nike

这是一个奇怪的问题,当我使用 SWIG 时有时会发生。生成 Python 包装器。它发生在 Swig 2.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

有谁知道,是什么触发了这种行为以及如何解决它?我过去曾能够解决此问题,但我一直无法追踪到使此问题消失的具体更改。

最佳答案

大师将新手转向门口,一只支持性的手搭在他的肩膀上说:“年轻的新手,去读他妈的手册。”因此,新手开悟了。

好吧,这是一个愚蠢的用户错误。这实际上是预期的行为,这个伪代码实际上是一个叫做 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 编译之间的所有文件,并且还被重构期间引入的一些与导入相关的错误分散了注意力。

该死,我已经有一段时间没有让自己如此惊讶了。

关于python - SWIG 生成无效的 Python 包装器代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com