问题标签 [python-extensions]

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 回答
600 浏览

python - 猴子修补 Python 中的 C 扩展

使用问题 972中讨论的方法,我无法在 psycopg 中修改 cursor() 方法:

尝试使用类型修补 psycopg2 中的方法,但它不起作用:

是因为它是C扩展吗?

0 投票
2 回答
1202 浏览

python - 将输出文件添加到 Python 扩展

我已经定义了一个自定义build_ext来构建一个我试图使 pip 友好的时髦扩展。以下是我正在做的精简版。

在打包这个模块并用 pip 安装它之后,foo我的 virtualenv 的 site-packages 目录中有一个模块。目录结构如下所示。

egg-info/SOURCES.txt文件不包括__init__.py我手动创建/移动的文件。当我执行pip uninstall foo命令时,命令会留foo/__init__.py在我的 virtualenv 的站点包中。我想 pip 删除整个包。如何将__init__.py我手动移动到构建目录的生成文件添加到已安装的输出文件列表中?

我意识到这是令人作呕和骇人听闻的,所以我欢迎恶心和骇人听闻的答案!

尝试:

  1. 添加packages=['foo']-当我这样做时,pip 不会构建扩展。还尝试调整包名称的文件路径/命名空间版本——没有区别。
0 投票
2 回答
914 浏览

python - 我可以使用 ctypes 从嵌入在 C 中的 python 回调 C 函数吗?

我有一个带有嵌入式 python 代码的 C 程序。我已经从源代码编译了 python 2.7.2,并将我的程序与 libpython2.7.a 链接起来。

现在在我的 python 代码中,我希望从链接到我的 C 程序的其他 C 库中回调函数。我可以编写一个 Python 扩展(请参阅本文档中的扩展嵌入式 Python )。但是,ctypes会让这变得更容易,并且允许我使用一些现有的代码。

ctypes旨在加载共享库,我想知道是否有办法将它“指向”回我的静态程序代码。

我无法将相关代码编译到共享库中,因为我的目标是 iOS 并且 Apple 禁止使用 AFAIK 共享库。

0 投票
1 回答
575 浏览

python - 如何将 PyFrameObject 转换为 PyObject

也许我错过了一些东西,但这里有一个问题:

我正在通过 C 扩展跟踪 python 代码,并且我的跟踪函数得到了 PyFrameObject* 框架。现在我想通过 Python 代码(嵌入或由 Cython 转换为 C)处理帧,但它处理 PyObject*。

如何将 PyFrameObject* 转换为 PyObject*?我在 frameobject.h 中找不到合适的转换函数。

谢谢。

0 投票
2 回答
138 浏览

python-c-extension - 是否可以在 Python C 扩展中包含 socketmodule.h?

我想在我的 Python C 扩展中调用 socketmodule.h 中定义的 PySocketModule_ImportModuleAndAPI 函数。

0 投票
1 回答
2443 浏览

python - 无法加载存在的 python 扩展模块

我正在尝试使用 thanos,它在运行时创建一个扩展模块。Thanos 不断失败,因为它无法导入它在运行时创建的扩展。

我很困惑为什么会这样。

在运行时(编译后)“cutils_ext”目录包含cutils_ext.so

import cutils_ext有效,但import cutils_ext.cutils_ext失败了

我已经直接用imp进行了测试。说 cutils 是导入的 cutils_ext 包。当我做:

我再次得到:

我完全感到困惑。有没有办法调试这个?由于无法启动 python 解释器(使用 picloud),我无法在详细模式下运行 python,但是如果我可以在运行时启用详细,那将有所帮助(还没有弄清楚如何做到这一点)。

0 投票
1 回答
9199 浏览

python - 集成 C 和 Python:ValueError:模块函数无法设置 METH_CLASS 或 METH_STATIC

我第一次尝试集成 C 和 Python 2.7.3。对于初学者,我只是想为 Python 编写一个可以进行基本加法的 C 模块。(它被称为 npfind 是因为一旦我弄清楚了,我想为 numpy 写一个 find 方法)

npfind.h:

npfind.c:

pynpfind.c:

npfind.py:

npfindsetup.py

毕竟,在 Windows 7 上,我输入

这似乎有效。然后当我尝试查找 npfind.py 时,我收到此错误:

我无法弄清楚它在说什么。什么是 METH_CLASS 和 METH_STATIC,我为什么要设置它们?

0 投票
1 回答
346 浏览

python - 从 C 扩展代码中释放 python 列表

我们有一些代码创建一个 python 列表,然后将数据项附加到它。我们担心的是,如果其中一个数据项结果为 NULL,那么我们认为整个列表(即任何先前添加的项)都毫无价值,我们想释放列表和它的内存。我需要做什么来确保垃圾收集器释放所有内存?

当前代码是:

但我们想做这样的事情:

那么列表对象上的 DECREF 是否足以确保 GC 释放所有内容?

0 投票
1 回答
306 浏览

c++ - 从 Python 扩展调用 C++ 虚拟成员崩溃

我正在尝试围绕一些 C++ 类编写一个薄包装器,以便从 Python 调用它们。具体的问题是,如果virtual下面没有注释,那么尝试创建Foo()解释器就会崩溃。我没有兴趣将此代码重写为 Boost::python、SWIG 或 Pyxxx 来解决这个问题 - 这是从一个更大的系统中提取的我想知道它为什么会发生,尽管如果这些库中的任何一个解决了这个问题我很想知道他们是如何实现它的。如果我在系统中设置扩展模块并注册类型,那么来自 Python 解释器的调用可以毫无问题地工作,无论是使用extern "C"类中的静态成员还是仅使用类中的静态成员来在 Python 类型的插槽中注册。

如果我声明一个成员是虚拟的,那么尝试调用它(在 Python 解释器的调用中)会导致内存访问错误的崩溃。如果我将类成员打印为指针,访问的地址是我得到的偏移量。我有特定的代码要遵循,但基本问题是:Python 调用的 C 运行时环境中的某些东西是否会破坏虚拟类成员函数的发送?Python 是 v2.6.7,C++ 扩展是由 GCC 4.2.1 编译的。有相关问题提示Boost::python支持这个,是直接做还是通过类成员函数模拟?

0 投票
1 回答
1290 浏览

python - 如何在 Python C 扩展中为 __init__ 指定文档字符串

也许是一个愚蠢的问题:如何为特殊函数指定文档字符串,例如__init__在编写 C 扩展时?对于普通方法,方法表提供了文档字符串。当我尝试 help(myclass) 时,会显示以下自动生成的文档:

但这是我想要覆盖的。