问题标签 [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.
python - 释放 PyTuple 对象
PyTuple
使用 Python C-API释放对象的正确方法是什么?
我知道元组在引用计数语义方面有些特殊,因为PyTuple_SetItem
“窃取”了对插入元素的引用。我也知道减少元组对象的引用会减少元组中所有元素的引用计数。
考虑到这一点,我认为应该安全地说:
但是当我减少元组引用计数时,最后一行会导致分段错误。我不明白为什么会这样。就在调用Py_DECREF
引用计数之前1
,那么这里的问题是什么?
python - Python C API:PyEval_CallFunction?
我在名为的 Python C API 中发现了一个PyEval_CallFunction
似乎很有用的函数。它允许您通过说以下内容来调用 Python 可调用对象:
但是,我找不到有关此功能的任何官方文档。谷歌搜索带来了各种讨论此功能的非官方教程,但是:
该函数没有记录在官方 Python 文档中,所以我不知道它是否应该是公共 API 的一部分。
搜索网络会发现不一致的使用政策。一些教程指出格式字符串需要在类型列表周围加上括号,例如
"(OiiO)"
,而其他时候我看到它在没有括号的情况下使用。当我在实际程序中实际尝试该功能时,它似乎需要括号,否则会出现段错误。
我想使用这个功能,因为它很方便。有谁知道这件事,或者知道为什么没有记录?它是公共 API 的一部分吗?
python - 如何获取当前的 PyInterpreterState?
我想创建一个PyThreadState
,因为当前线程似乎没有一个。
如何让当前的 PyInterpreterState 传递给PyThreadState_New(...)
,或者只有在我嵌入解释器(并因此创建它)而不是从 python 调用库时才应该这样做?
python - C++ Python 嵌入:在没有 Python 的机器上运行?
我正在尝试制作一个支持 Python 脚本的小游戏。我使用 Python C-API 没有问题,但我不知道如何确保游戏能够在没有安装 Python 的计算机上运行。
我知道我需要 pythonXY.dll——还有什么?当我尝试运行该程序时,它告诉我找不到 encodings.utf_8。我尝试将 encodings/utf_8.py 文件复制到与我的程序相同的目录中,但仍然弹出错误。
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 之前,它运行正常。
python - __slots__ 在 Python 中是如何实现的?
__slots__
在 Python 中是如何实现的?- 这是否暴露在C 接口中?
__slots__
在 C via 中定义 Python 类时如何获得行为PyTypeObject
?
python - 从 C 创建一个实现 __dict__ 的 Python 类型?
__dict__
如果在 Python 中定义了一个“普通”类,它是如何创建的?- 是否有任何带有 s 的非动态类型的示例
__dict__
? - 通过 Python 定义的类型是否
PyTypeObject
通过type_new
?
有一个tp_dict
成员PyTypeObject
,但我找不到有关如何使用它的信息。typeobject.c
's中似乎也发生了一些事情,type_new
但我无法清楚地破译它。
以下是我找到的一些相关信息:
c++ - 从一组非连续的 2d 切片创建一个 3d numpy 数组
是否可以使用 PyArray_NewFromDescr 从一组连续的二维数组创建 numpy 数组对象,而无需复制数据?
python - Python C-API 和 Numpy:import_array 上的核心转储
在这样一个简单的程序上,我可能做错了什么?我把头发扯掉了:-)
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 不为空,但访问该字典会使解释器崩溃。我应该发送错误报告吗?