问题标签 [python-cffi]

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 投票
2 回答
1706 浏览

python-3.x - Python、PyPy 和 CFFI:我应该使用什么?

我需要用 python 调用 C 库,经过一番考虑,似乎 CFFI 最适合这种工作。但是,到目前为止,如果我正确使用它,我会感到非常困惑,因为有些东西似乎只在 PyPy 上按预期工作,而另一些似乎只在 Python3 上工作(据我所知,PyPy 不支持) )。

以下是 CFFI 文档中最基本的代码示例:

使用 Python3 运行此代码时,出现以下错误:TypeError: initializer for ctype 'char[]' must be a bytes or list or tuple, not str

在寻找错误时,我发现它是去年 1 月在 PyPy 中修复的问题。所以我看看这个东西是否与 PyPy 一起运行,它确实如此。万岁!

但是,已经在第二个示例中,我遇到了相反的问题:

在 PyPy 中运行它会给我带来另一个错误:

由于示例说明它不适用于旧版本,因此我检查了我的 CFFI 版本:1.2.1,一切正常。

最后,我使用 Python3 而不是 PyPy 运行第二个示例,谁会想到,它完全符合它的预期。

作为 Python 新手,现在我真的不知道我应该使用什么,以及为什么来自同一文档的示例只能在不同版本的语言上运行。当然还有一个问题,我可能只是配置了一些错误(对于 Linux 也是新手),或者我应该完全使用另一个 python 版本。有人可以对此有所了解吗?

0 投票
1 回答
2019 浏览

python - 卸载在 Python 中加载的 DLL

在 Windows 上,我有一个我们自己制作的 DLL,其中加载了另一个 DLL。问题是当在 Matlab 中使用 DLL 时,loadlibrary一切都很好。calllibunloadlibrary

在 Python 中,我尝试使用ctypesand cffi,两者的结果相同。我可以加载 DLL 并调用函数,但我无法再次退出。Python 挂起,我必须从任务管理器中结束任务。

ctypes试着打电话

正如这里所建议的那样,在 Python 中释放打开的 ctypes 库无效。此外,我尝试调用显式函数来卸载其他 DLL。

谁能给出提示或解决方案为什么它不会卸载/挂起?

0 投票
1 回答
1196 浏览

python - 使用 CFFI 的缓冲协议

我想为一个对象公开一个缓冲区协议,就像在 Cython 文档的这个示例中一样,但是我需要使用CFFI来执行此操作,并且我无法找到任何示例来公开缓冲区协议。

0 投票
1 回答
2904 浏览

python - 定义结构时python cffi解析错误

我正在尝试使用python-cffi来包装 C 代码。下面显示了包装调用example_build.py的尝试:lstat()

编译python example_build.py时会抱怨mode_t st_mode.

手册中给出的类似示例没有任何问题。我错过了什么?TIA。

0 投票
1 回答
120 浏览

python-c-extension - 如何使用 python cffi 从胶囊中取出 voidptr?

有什么方法可以使用 cffi 提取胶囊的内容并将其转换为可以发送到 C 代码中的 voidptr 吗?

背景信息——numpy 数组可以给你一个包含一个非常方便的结构的胶囊,即PyArrayInterface。我认为 PyPy 尚不存在胶囊,所以答案可能是否定的,但我相信未来包含适用于所有 python 版本的胶囊,所以我希望答案是肯定的 :)。

0 投票
1 回答
2237 浏览

python - 生成的 windows exe (pyinstaller) 无法加载 _cffi_backend

我正在尝试在 windows7(x64) 上使用 pyinstaller(3.0) 生成可执行文件(x86)。我已经用 pip 安装了 cffi 和其他需要的软件包。我可以从命令行成功导入 cffi 和 _cffi_backend 模块:

>

在尝试运行生成的可执行文件时,出现以下错误:

您可能会在此处看到完整的启动日志。

顺便说一句,我已经用mingw编译了libcffi库并得到了一个DLL文件。然后复制到其中一个库路径,我在应用程序启动时再次遇到同样的错误。

我不知道为什么 _cffi_backend 库无法在应用程序启动时加载,即使它存在并且在 python 路径中。我不擅长python,不幸的是我被困在这将近2天,任何建议和指导将不胜感激。

谢谢。

0 投票
1 回答
134 浏览

python - python cffi library object introspection results in __dict__ object change

I would like to get the full listing of enums from the header file using cffi. But I see a strange behaviour: by observing the object, I'm forcing the change in the underlying __dict__:

I'm guessing that __dict__ is not populated until first getattr() on the class is called, but the real question is: what does dir() do that populates __dict__? Calling hasattr() seems to do the same thing.

0 投票
15 回答
71929 浏览

python - 没有名为 _cffi_backend 的模块

我的 Linux rhel-5 中有 Python 2.6。我已经安装了 pip 和所需的 CFFI 包。当我尝试运行示例 CFFI 程序时:

它说:

可能的错误是什么?我在安装过程中遗漏了什么吗?我已经安装了 pip、wheel、pycparser、pytest 和 cffi。

0 投票
1 回答
784 浏览

python - 使用带有嵌入式 PyPy 的外部“Python”样式 cffi 回调

可以嵌入 PyPy 使用新的 extern "Python" 样式 cffi 回调吗?PyPy 的文档仅显示旧式 cffi 回调,但 cffi 文档建议不要使用它们。PyPy 文档没有提及新样式回调,我无法让新样式回调工作。

嵌入 PyPy

Extern “Python”(新型回调)

运行编译后的 C 时出错(C 的源代码与 PyPy 文档相同):

0 投票
1 回答
970 浏览

python - 无法在 fedora23 工作站上安装 cffi

我正在尝试使用 pip3 在 fedora23 工作站上安装 cffi。但我得到以下错误。

命令“python setup.py egg_info”失败,错误代码 1 在 /tmp/pip-build-yweqr7c9/cffi

我应该怎么办?提前谢谢。