问题标签 [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 投票
0 回答
152 浏览

python - Python 刷新输出不适用于 cffi 库

supervisor我使用依赖 C 库来初始化组件的 Python 应用程序(在 下运行)有一个奇怪的行为。

我的问题是当我在那里调用一个函数时,我看不到这个 C 库打印的输出。

应用程序中的所有输出都由logging模块管理,主管将其重定向到单个日志文件。

所以我认为这只是flush问题,我尝试了以下方法:

但它不起作用。printf()我在日志文件中看不到我的。

另外,我注意到如果我尝试重新启动应用程序: sudo supervisorctl restart all C 库输出最终会在日志文件末尾刷新!

最后,PYTHONUNBUFFERED=1在 supervisorctl 中设置使其工作,但我不想因为性能问题而无缓冲地运行我的程序。

--> 有人能解释一下为什么sys.stdout.flush()在调用 C 库之后使用不会刷新它在我的日志文件中的输出吗?

谢谢 !

0 投票
1 回答
1289 浏览

common-lisp - 在 Common Lisp 中使用 CFFI,调用返回指针的函数

我正在使用 SBCL,并尝试使用 CFFI。我开始按照这里的手册进行操作,但我一直认为这个函数curl_easy_init是未定义的,所以我决定尝试一个更简单的案例。

一些函数按预期工作,而另一些函数似乎没有定义。这在下面解释:

这是我的 C 代码:

此 C 文件编译为:

我的 Common Lisp 代码:

我得到了我所期望的:

什么似乎是一个问题:

生成错误:

我得到了同样的错误clean_this,并且在上面的链接中,按照手册,curl_easy_init这激发了这个实验。

0 投票
1 回答
622 浏览

python - 文字缩放效果颤抖

我用 MoviePy 和 Gizeh 创建了一个文本缩放动画。但是,当代码在不同的操作系统上运行时,结果会有所不同。以下两个gif是由相同的python代码生成的。效果在 MacOS 上看起来还不错,但在 Linux 上效果很差。

在 MacOS 上相当不错

在 MacOS 上相当不错

Linux 上的颤抖效果

Linux 上的颤抖效果

我确定两个系统上的库(MoviePy、Gizeh、Cairocffi、cffi 等)版本是相同的。我也尝试了高 fps 或缩小测试,但没有奏效。

我不知道这可能是我这边的问题还是编码错误。

我试图找出导致此问题的原因。我在 gizeh.py 第 489 行(与cairo_text_extents相同,在 cairocffi 库,context.py,第 2003行)中发现函数ctx.text_extents(txt)的返回值在 Linux 上的每一帧都不同。在 Mac 上,该函数总是返回相同的值。但是,即使我固定了这些值,效果还是一样的。


我在开罗图书馆找到了这个问题。我写了一个简单的演示来创建一系列放大文本字符串的图像。我打印了函数 cairo_text_extents() 的返回值,它指示了字符串的范围。我在 Linux 和 MacOS 上运行相同的代码。MacOS 上的值保持不变。在 Linux 上,每个帧的值都不同。尝试找出原因。

0 投票
0 回答
83 浏览

python - numba 的 nopython 模式下的挂钟计时器(性能计数器)

我有一个用 numba 编写的长时间运行的数值例程,使用它的 nopython 模式。因为它是 nopython,所以我不能用KeyboardInterrupt它来停止它,也不能在它运行时得到任何关于它的进度的反馈。因此,我想定期中断例程以返回 python。我想使用挂钟时间来确定在什么时候停止。我可以从 numba 的 nopython 模式使用任何这样的计时器吗?我想可以使用 numbactypescffi支持从合适的库中调用某些函数。在 python 二进制文件或 OS X 上的其他标准库中是否有这样的函数?

0 投票
1 回答
1843 浏览

python - 如何在 Python 虚拟环境中安装密码学?[未定义符号:__syscall_error]

到目前为止我尝试过的步骤:

  1. 创建虚拟环境。

    python3.4 -m venv [venv_name_here]

  2. 进入虚拟环境。

    cd [venv_name_here]

  3. 激活虚拟环境。

    源箱/激活

  4. 安装安装工具。

    pip install --upgrade setuptools

  5. 安装pyparser。

    pip install --upgrade pyparser

输出:

  1. 安装 cffi。

    pip install --upgrade cffi

输出:

  1. 安装密码学。

    pip install --upgrade 密码学

输出:


这里有什么故障以及如何解决?

在虚拟环境中安装密码学似乎是一件相对简单的事情,但它不起作用,我在网上的任何地方都没有看到任何对此类问题的引用。

更新:操作系统类型是 Linux,密码学的安装在系统本身上运行良好。此问题仅在尝试安装到虚拟环境时出现。

0 投票
1 回答
10741 浏览

python - CFFI 在 Python (Linux) 虚拟环境中失败 - 尝试在 venv 中安装加密包

在虚拟环境中安装cffi遇到错误,但似乎可以安装。这些错误是否真的很严重,在安装密码学时可能导致它失败(见下文)?

pip install cffi==1.11.5

下载/解压cffi==1.11.5

下载 cffi-1.11.5.tar.gz (438kB): 438kB 已下载
Running setup.py (path:/[venv-install-directory]/build/cffi/setup.py) egg_info for package cffi
下载/解包 pycparser (来自cffi==1.11.5)
下载 pycparser-2.18.tar.gz (245kB): 245kB 已下载
Running setup.py (path:/[venv-install-directory]/build/pycparser/setup.py) egg_info for package pycparser
警告: 没有与 'yacctab. '在目录 'tests' 下找到
警告:没有以前包含的文件匹配 'lextab.
'在目录'tests'下找到
警告:没有以前包含的文件匹配'yacctab。' 在目录 'examples' 下找到
警告:没有以前包含的文件匹配 'lextab.
' 在目录 'examples' 下找到
安装收集的包:cffi、pycparser
运行 setup.py install for cffi
building '_cffi_backend' extension
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes - fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/local/lib/libffi-3.2.1/include -I/[venv-install-directory]/include -I/usr/local/include/python3.4m -cc/_cffi_backend。 c -o build/temp.linux-i686-3.4/c/_cffi_backend.o
gcc -pthread -shared build/temp.linux-i686-3.4/c/_cffi_backend.o -L/usr/local/lib -lffi -o build/lib.linux-i686-3.4/_cffi_backend.cpython-34m.so 在 cffi==1.11.5 的安装记录中找不到 .egg-info 目录
运行 setup.py install 以获取 pycparser
警告:没有以前包含的文件匹配 'yacctab. '在目录 'tests' 下找到
警告:没有以前包含的文件匹配 'lextab.
'在目录'tests'下找到
警告:没有以前包含的文件匹配'yacctab。'在目录 'examples' 下找到
警告:没有以前包含的文件匹配 'lextab.
'在目录'examples'下找到
构建词法/解析表
在pycparser的安装记录中找不到.egg-info目录(来自cffi == 1.11.5)
成功安装cffi pycparser
清理...

这个问题令人困惑,因为它在我的本地系统上工作,但是在创建虚拟环境时,在尝试安装密码学时出现以下错误:

虚拟环境实际上创建了本地环境的副本,不是吗?

那么在系统安装本身没有问题的情况下,“_cffi_backend”如何在虚拟环境中不起作用?我一开始不明白这怎么会发生。

有没有人成功处理过这样的问题?如果您有想法或解决方案,请具体说明,因为我已经花了好几个小时来尝试到目前为止还没有奏效的解决方案。

除其他外,我已经尝试在创建虚拟环境之前从源代码编译和安装 libffi:https ://sourceware.org/libffi/

是否有其他替代方法可以创建不需要重新安装每个软件包的虚拟环境 - 即在哪里可以使用现有安装的设置并将其直接复制到虚拟环境中(或避免陷入依赖地狱的类似方式)?

一旦你掌握了实际问题,这似乎是一个很容易解决的问题。如果我无法弄清楚这一点,我就无法部署我的项目,因为它主要依赖于密码学。因此,提前感谢您提出的任何有助于解决此问题的想法。

0 投票
0 回答
355 浏览

haskell - 从 Common Lisp (SBCL) 调用 Haskell

我正在尝试在 debian pc 上从 Common Lisp(sbcl 版本 1.2.4)调用 Haskell(ghc 版本 7.6.3)。

Haskell 代码是

C接口是

编译和链接由以下命令完成:

在sbcl中,我用quicklisp加载cffi,然后加载动态库

当我调用函数时foo

我从 sbcl 收到错误“未处理的内存错误”。欢迎任何建议或想法。

0 投票
1 回答
478 浏览

python - 使用 cffi 从 python 调用 fortran dll

我目前正在开发一个需要来自 Fortran dll 的 PDE 求解器的 simultion 工具。为了弄清楚如何从 python 调用 dll,我使用了来自同一个 dll 的更简单的函数,但无法让它工作。

系统规格:Windows 7 Professional(64 位) Spyder 3.2.8 Python 3.6.5(32 位)

我现在使用 cffi 来调用 fortran 函数,但它也不起作用。

这是我用来用 cffi 调用函数的代码。我正在加载的 dll 包含我打算调用的函数 S01BAF。我收到的错误消息是:

我不知道那是什么意思。

为了检查函数本身是否正常工作,我尝试从不同的语言(VBA)调用它,它工作得很好。

消息框显示 ln(2) 的正确值。

我已阅读先前提出的问题,但无法将答案应用于我的问题。

这是感谢@Joe的代码!

干杯,蒂洛

0 投票
1 回答
1288 浏览

python - CFFI - 使用带有 #ifdef 的结构

目前我正在将一些现有的 C 代码包装到 Python 中。它与 CFFI 配合得很好,但最后一件事我不明白。

如何处理“#ifdef”语句?

假设我在 c 中有这个结构:

我不明白我如何处理包装这些“#ifdef”语句。在文档中我发现了一些带有“...;”的东西 但是我怎样才能访问结构的数据呢?

当尝试使用 ... 并通过以下方式访问数据时:

我收到一条错误消息:

那么在使用 cffi 时如何处理这些预处理器指令有什么解决方法吗?提前非常感谢。

0 投票
0 回答
364 浏览

python - cffi 模块已构建但在导入时未找到

我正在构建一个依赖于 C 库的 python 包(pypi 分发的最终目标)。我的 setup.py 中包含 cffi - cffi_modules=['my_package/my_build/build.py:ffibuilder'],
当我调用时成功编译这些文件setup.py sdist bdist_wheel---
_c_my_package.o _c_my_package.c _c_my_package.cpython-37m-darwin.so (并且,在轮子中,_c_my_package.abi3.so- 但我不想使用 ABI 功能)

但是,当我pip install my_package(工作正常)然后从口译员>>>import my_package那里得知: no module named _c_my_package

注意:当 I 时pip install -e /locallocation/my_package,它会将编译后的 c 脚本作为模块导入。

如何正确准备这些模块以进行导入?

cffi 1.11.5,python3.7