问题标签 [python-c-api]

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

python - 释放 PyTuple 对象

PyTuple使用 Python C-API释放对象的正确方法是什么?

我知道元组在引用计数语义方面有些特殊,因为PyTuple_SetItem窃取”了对插入元素的引用。我也知道减少元组对象的引用会减少元组中所有元素的引用计数。

考虑到这一点,我认为应该安全地说:

但是当我减少元组引用计数时,最后一行会导致分段错误。我不明白为什么会这样。就在调用Py_DECREF引用计数之前1,那么这里的问题是什么?

0 投票
2 回答
2477 浏览

python - Python C API:PyEval_CallFunction?

我在名为的 Python C API 中发现了一个PyEval_CallFunction似乎很有用的函数。它允许您通过说以下内容来调用 Python 可调用对象:

但是,我找不到有关此功能的任何官方文档。谷歌搜索带来了各种讨论此功能的非官方教程,但是:

  1. 该函数没有记录在官方 Python 文档中,所以我不知道它是否应该是公共 API 的一部分。

  2. 搜索网络会发现不一致的使用政策。一些教程指出格式字符串需要在类型列表周围加上括号,例如 "(OiiO)",而其他时候我看到它在没有括号的情况下使用。当我在实际程序中实际尝试该功能时,它似乎需要括号,否则会出现段错误。

我想使用这个功能,因为它很方便。有谁知道这件事,或者知道为什么没有记录?它是公共 API 的一部分吗?

0 投票
3 回答
1429 浏览

python - 如何获取当前的 PyInterpreterState?

我想创建一个PyThreadState,因为当前线程似乎没有一个。

如何让当前的 PyInterpreterState 传递给PyThreadState_New(...),或者只有在我嵌入解释器(并因此创建它)而不是从 python 调用库时才应该这样做?

0 投票
1 回答
257 浏览

python - C++ Python 嵌入:在没有 Python 的机器上运行?

我正在尝试制作一个支持 Python 脚本的小游戏。我使用 Python C-API 没有问题,但我不知道如何确保游戏能够在没有安装 Python 的计算机上运行。

我知道我需要 pythonXY.dll——还有什么?当我尝试运行该程序时,它告诉我找不到 encodings.utf_8。我尝试将 encodings/utf_8.py 文件复制到与我的程序相同的目录中,但仍然弹出错误。

0 投票
1 回答
975 浏览

python - 为什么不能在没有上述 Python27/lib py 文件的情况下使用加载 python27.dll

我有一个 vc6 应用程序并使用 python27.dll。

如果运行时环境有 python27/lib/* 文件,没关系。

但没有 python27/lib/* 文件,应用程序将终止。

我使用了进程监视器,并且观察进程将加载许多 py. (像 os.py...)

我看到 vc6 消息窗口显示“ Python 无法加载默认激活上下文”消息。(我跟踪消息出现在 dl_nt.c 的dll_main中)

如何使用 python27.dll 而没有其他 lib/files....?

在使用 python23.dll 之前,它运行正常。

0 投票
1 回答
1483 浏览

python - __slots__ 在 Python 中是如何实现的?

  • __slots__在 Python 中是如何实现的?
  • 这是否暴露在C 接口中?
  • __slots__在 C via 中定义 Python 类时如何获得行为PyTypeObject
0 投票
4 回答
2491 浏览

python - 从 C 创建一个实现 __dict__ 的 Python 类型?

  • __dict__如果在 Python 中定义了一个“普通”类,它是如何创建的?
  • 是否有任何带有 s 的非动态类型的示例__dict__
  • 通过 Python 定义的类型是否PyTypeObject通过type_new

有一个tp_dict成员PyTypeObject,但我找不到有关如何使用它的信息。typeobject.c's中似乎也发生了一些事情,type_new但我无法清楚地破译它。

以下是我找到的一些相关信息:

0 投票
2 回答
442 浏览

c++ - 从一组非连续的 2d 切片创建一个 3d numpy 数组

是否可以使用 PyArray_NewFromDescr 从一组连续的二维数组创建 numpy 数组对象,而无需复制数据?

0 投票
1 回答
1192 浏览

python - Python C-API 和 Numpy:import_array 上的核心转储

在这样一个简单的程序上,我可能做错了什么?我把头发扯掉了:-)

0 投票
0 回答
961 浏览

c++ - 在不更改 c/c++ 代码的情况下从 python 调用 c/c++ 代码的任何方式?

编辑完成:我包装了一个自定义 python dll,目的是最终删除自定义代码并使用最近的 python 而不是现在使用的旧版本。其中一个函数初始化一个 python 扩展,并调用

在我的包装器中,此调用产生的 (c) 对象正在崩溃PyErr_Print()(是的,我也已经包装了它)。

我想尝试将 Repr 或 Str 调用替换为我选择的某些东西,看看它们是否有罪。另外,我不能使用胶囊,因为即使在 python 代码上也应该可以使用这些对象。

根据要求:真正的问题发生在两个 c 本机指针之一被调用的地方。我拿了 python 2.7.1 源代码,在 VS 2003 上打开(项目在 PC/VS7.1 上),在pythonrun.c那里打开并在最后添加了三驾马车函数的存根:

构建解决方案但删除了不起作用的 python 子项目(不需要它们)

将此 bash 文件放在 Game/Bin 目录(python dll 所在的位置)

编译并运行。游戏使用控制台打开,如果您dir(cvar)在运行/打印代码期间创建 AST 后键入它会崩溃(抱歉,wine 不理解 VS 调试符号)。奇怪的是,另一个本机指针“dir(ccmd)”并没有崩溃,但可能有一些线索表明另一个有什么问题:

请注意,它在之前崩溃(编辑:实际上,它以某种方式再次被调用。python C api 中的异常?需要调查。EDIT2:实际上这只发生在“dir(ccmd)”命令中,而不是“dir(cvar) ",立即崩溃)返回并且此功能是特定于控制台的。很可能还有更多我不知道的改动。

控制台上的“print ccmd”、“str(ccmd)”或“repr(ccmd)”给出:

“print cvar”、“str(cvar)”或“repr(cvar)”给出

另请注意,我不知道ConsoleString函数的返回是什么,但我知道它正在测试返回程序集上的 0 (NULL) 以分支 if。

编辑:好的,通过在崩溃时将调试器应用于附加来找到崩溃点:它是 python 2.7.1 源代码上 typeobject.c 的第 3963 行,

Base 不为空,但访问该字典会使解释器崩溃。我应该发送错误报告吗?