问题标签 [extension-modules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1296 浏览

groovy - 将扩展模块添加到 groovy 类

我正在尝试创建简单的extension module.

我创建了Main.groovy文件

我编译了它(没有运行)。

我创建了ItemExtension.groovy班级

这是我的org.codehaus.groovy.runtime.ExtensionModule描述符

ItemExtension.groovy使用编译groovyc(我预编译Main.groovy以获取Item类)

编译ItemExtension.classMETA-INF我放入.jar文件(重命名.rar)。它的结构看起来像这样

我把它放在ItemExtension.jar同一个文件夹中Main.groovy并再次编译它,但带有cp参数 add jar

但是当我尝试运行它时

我得到了这个例外

我做错了什么?

0 投票
1 回答
162 浏览

c - 扩展模块:将 void * 编组为 bytearray(和/或反之亦然)

使用python(means python3) 准备数据(也将它们发送到线 - SPI)进行一些实验表明它很慢(系统有限)。所以我正在考虑创建扩展模块C来推迟关键的东西。我想要:

  • python脚本可以访问由malloc()扩展模块中创建的内存块,希望可以透明地转换为bytearray
  • 扩展模块将获得指向bytearray创建的对象的指针,python希望可以透明地转换为void *

目标是使零拷贝也作为零转换内存块可供python(as bytearray) 和扩展模块 (as void *) 访问。

有什么方法,如何实现?

0 投票
1 回答
8796 浏览

python - C++ Python 模块导入错误:“未定义符号:Py_InitModule3”(Py_InitModule ())

我刚刚开始尝试用 C 编写我的第一个 Python 扩展模块,并使用https://www.tutorialspoint.com/python/python_further_extensions.htm提供的说明

我在 Linux Mint 18.1 上,在其 virtualenv 版本中使用 Python 3.6.1。

作为第一步,我已经编译了我计划编写的 Python 模块的一个非常简约的版本。

这是我的C代码:

这里是我用来将 C 代码编译为的 setup.py 文件的代码 uniqueCombinations.cpython-36m-x86_64-linux-gnu.so

令我惊讶的是,该模块在导入时无法正确加载:

为什么我会收到此错误?

我应该怎么做才能正确加载编译的模块?

这里的构建协议带有关于 Py_InitModule3 隐式声明的警告:

0 投票
0 回答
16 浏览

c++ - 简约的 Python 扩展模块,提供使用 Python sorted() 对列表进行排序的函数

我目前正在开发一个 C++ Python 扩展模块,并希望在这个模块中使用 Python 自己的标准库函数来对扩展模块传递的对象执行操作。

举一个简单的例子,我想知道如何在 C++ Pythons 标准库函数 sorted() 上调用传递给 Python 列表对象的扩展模块函数。

换句话说,问题是:

如何在 Python 扩展模块的 C++ 中表示等效于以下 Python 代码:

?

0 投票
1 回答
634 浏览

python - 如何从 Python 扩展模块的 C 代码中调用内置函数(或方法)?

我目前想要完成的是调整 Pythonsitertools模块函数以在创建组合之前combinations对传递的进行排序,目标是对返回的组合进行排序。iterable

我是第一次开发 Python 扩展模块,到目前为止我唯一的经验是编写和编译类似 Python 扩展模块的“Hello World”,但我希望我在几种编程语言中的整体编程经验是我可以建立足够坚实的基础来成功应对这一挑战。

我知道有一个内置的 Python 函数sorted()可以对传递给的迭代进行排序,combinations但我不知道如何从扩展模块的 C 代码中调用它。

我只是尝试编写iterable = sorted(iterable);,但即使模块编译(带有警告),编译模块的导入也会失败ImportError: cgitertools.cpython-36m-x86_64-linux-gnu.so: undefined symbol: sorted

我的问题是:

如何sorted()从 Python 扩展模块的 C 代码中调用 Pythons 内置方法(用作示例)?

下面是我尝试过的所有细节以及为什么它不起作用:

0 投票
1 回答
103 浏览

python - Python扩展模块的C代码中的“if item in list/set”是什么?

编写一个 Python 扩展模块,该模块旨在加速以 Python 脚本编写的函数的执行 我遇到了一个问题,即如果 C-Python 对象在 C-Python 中,如何检查 Python 扩展模块的 C 代码C-Python 对象的集合/列表。

换句话说,我所关注item in list/set的是 Python 扩展模块的 C 代码中的 Python 脚本表达式。

欢迎任何提示如何实现这一点。

0 投票
1 回答
541 浏览

groovy - 无法让 Groovy 扩展模块工作

我正在尝试创建一个扩展模块,然后在不同的项目/脚本中使用它,但无法让它工作。这是我正在做的事情:

步骤 1:创建一个名为 TemperatureUtils.groovy 的文件,它是一个类类。这是来源:

步骤 2:创建扩展模块描述符 - org.codehaus.groovy.runtime.ExtensionModule,其内容如下:

Step-3:编译类并手动创建一个jar文件,结构如下:

第 4 步:创建一个新脚本来使用扩展模块。脚本来源:

步骤 5:执行脚本。在这里,我收到以下异常:

现在,我尝试了一些方法,但无法正常工作:

  • 从扩展模块描述符中删除了最后一行 - "staticExtensionClasses=",但它不起作用。
  • 通过使用 @Category(Number) 注释并从两个方法中删除参数(并在方法主体中使用 'this' 而不是 'celcius' 和 'fahrenheit' 参数名称),将 TemperatureUtils.groovy 类更改为实际类别但它仍然没有工作。
  • 谷歌了它,但没有找到太多信息。也偶然发现了这个,但这对我也没有帮助。

非常感谢精彩的 stackoverflow 社区可以提供的任何帮助!:)

0 投票
1 回答
1526 浏览

python - 如何导入或安装预构建的 python 扩展模块(C++)(即未通过 setuptools 编译的库)?

我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11,因为它看起来很整洁,并且有一些很好的工具可以用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。

通过 CMake,我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它,我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的项目的整个构建(即这里使用 setuptools 描述的),因为它是一个大项目,我只是为其中的一部分提供 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后稍后运行“setup.py install”来做任何其他需要做的事情以使共享库可见,那将是更可取的到 Python。

这可能吗?还是我需要做一些其他类型的重构,比如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?

0 投票
1 回答
128 浏览

python - dlltool 使用 python27.def 文件失败

我想从 python27.dll (C:Windows/SysWOW64) 创建 libpython27.a

我的Linux:

使用 -v 运行 dlltool,我得到:

如您所见,我收到了 python27.def 文件的语法错误,但 libpython27.a 已构建。

我创建了 python27.def 如下:(在 Windows 中)

  • 得到 pexports-0.47-mingw32-bin.tar.xz (应该支持 32 位和 64 位)
  • 运行 pexports.exe -v .\python27.dll > python27.def

python27.def的内容:

我创建 python27.def 的过程有问题吗?

注意:下面有一个 libpython27.a,但我阅读了一些评论,指出它无法链接到交叉编译 linux 中的 python 扩展模块。

谢谢!

0 投票
1 回答
161 浏览

python - 带有 cp1252 编码字符串的 python3 C 扩展模块

我正在为现有的 C++ 库编写 Python3 扩展模块,它返回一个似乎采用 cp1252 编码的字符串。C++ 函数签名是

其中name是包含 c_str() 内容的输出变量,例如 0xb04600,它是 cp1252 代码页中的 DegreeSymbol,后跟大写字母F,由 NULL 字符完成。

在我的 python 扩展 C++ 代码中,我写了

但是,这会导致以下运行时异常

我将 cp2152 编码的字符串返回到 python 的正确方法是什么?

更新 我发现如果我使用y#而不是s#从扩展中返回一个 Python 字节对象,那么我可以将该字节对象转换回我的 python 代码中的字符串.decode('cp1252')。但是,这是 Python 中的一个额外步骤,应该在扩展模块中自动执行。不幸的是,我无法弄清楚如何