问题标签 [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 - 使用 C API 创建在 python 中声明的 python 类的实例
我想创建一个__main__
使用 C API 在范围内定义的 Python 类的实例。
例如调用类MyClass
,定义如下:
类类型位于__main__
范围内。
在 C 应用程序中,我想创建此类的一个实例。这本来可以很简单,PyInstance_New
因为它需要类名。但是,此功能在 Python3 中不可用。
任何有关替代方案的帮助或建议表示赞赏。
谢谢,保罗
c++ - 我可以在扩展 Python 时使用 C++ 功能吗?
Python 手册说您可以在 C 和 C++ 中为 Python 创建模块。在使用 C++ 时,您可以利用类和模板之类的东西吗?它不会与其他库和解释器产生不兼容吗?
python - 停止嵌入式 Python
我将 Python 解释器嵌入到 C 程序中。但是,在运行某些 python 脚本时,可能PyRun_SimpleString()
会遇到无限循环或执行时间过长的情况。考虑PyRun_SimpleString("while 1: pass");
在防止主程序阻塞时,我认为我可以在线程中运行解释器。
如何停止在线程中运行的嵌入式解释器中执行 python 脚本而不杀死整个进程?
是否可以将异常传递给解释器?我应该将脚本包装在其他会监听信号的脚本下吗?
PS:我可以在一个单独的进程中运行 python 但这不是我想要的——除非它是最后的手段......
更新:
所以,它现在有效。再次感谢 Denis Otkidach!
如果我没看错,您必须做两件事:告诉解释器停止并return -1
在 PyRun_SimpleString() 运行的同一线程中。
要停止,有几种可能性:PyErr_SetString(PyExc_KeyboardInterrupt, "...")
或者PyErr_SetInterrupt()
- 第一个可能让 Python 运行更多指令然后它停止,后一个立即停止执行。
return -1
用于将Py_AddPendingCall()
函数调用注入 Python 执行。文档从 2.7 和 3.1 版本开始提到它,但它也可以在早期的 Python 上运行(此处为 2.6)。从 2.7 和 3.1 开始,它也应该是线程安全的,这意味着您可以在不获取 GIL (?) 的情况下调用它。
所以可以重写下面的例子:
python - 为什么 Python 在 False 和 True 上保留引用计数?
我正在查看 hasattr 内置函数的源代码,并注意到有几行引起了我的兴趣:
不是Py_False
全球Py_True
价值观吗?纯粹出于好奇,为什么 Python 保留这些变量的引用计数?
c++ - Python 解释器作为 c++ 类
我正在将 python 嵌入到 C++ 中。在某些特殊情况下,我需要在同一个线程中使用两个单独的解释器实例。
我可以将 Python 解释器包装到 c++ 类中并从两个或多个类实例中获取服务吗?
c++ - PyDateTime_IMPORT 宏未初始化 PyDateTimeAPI 变量
我正在使用 Visual Studio 2008 在 Windows 上使用 Python C API。当我尝试使用PyDate_Check
宏和其他相关宏时,它们会导致访问冲突,因为静态变量 PyDateTimeAPI 为空。此变量使用PyDateTime_IMPORT
需要在使用任何日期时间宏之前调用的宏进行初始化。我在单独的线程上创建新的 Python 子解释器时这样做。
几个问题:
- 为什么宏PyCObject_Import
中的函数PyDateTime_IMPORT
返回 null。我理解 null 返回值是因为找不到模块。但是怎么找不到 datetime 模块呢?可能是因为子解释器中的 sys.path 不正确吗?- 另外,我是否PyDateTime_IMPORT
在正确的位置调用宏,应该是在初始化子解释器之后,还是在初始化 Python 解释器时?
PyDateTime_IMPORT
定义:
python - PyAPI_DATA() 宏的解释?
我在网上搜索过,似乎找不到文档,甚至找不到 PyAPI_DATA() 作用的简单解释(即使它在 Python 头文件中使用并在 python.org 上引用)。任何人都可以解释这是什么或指向我忽略的文档吗?
谢谢。
python - 如何在 Python setup.py 脚本中将标志传递给 gcc?
我正在用 C 编写一个 Python 扩展,它需要 CoreFoundation 框架(除其他外)。这可以很好地编译:
(“-framework”是一个仅限 Apple 的 gcc 扩展,但没关系,因为无论如何我都在使用他们的特定框架)
如何告诉 setup.py 将此标志传递给 gcc?
我试过这个,但它似乎不起作用(它编译,但当我尝试运行它时抱怨未定义的符号):
编辑:
这似乎有效:
python - 嵌套的 Python C 扩展/模块?
如何编译 C-Python 模块以使其对另一个模块是本地的?例如,如果我有一个名为“bar”的模块和另一个名为“mymodule”的模块,我如何编译“bar”以便它通过“import mymodule.bar”导入?
(抱歉,如果措辞不好,我不确定它的正确术语是什么。)
我在 setup.py 中尝试了以下操作,但似乎不起作用:
编辑
谢谢亚历克斯。所以这就是我最终使用的:
当然还有一个名为“mymodule”的文件夹,其中包含__init__.py
.
python - 在 C++ 模块中创建 PyTuple 崩溃
这段代码有一些问题。试图从我正在编写的 C++ 模块中返回一个元组(坐标)。它看起来对我来说,dirty
列表包含两个Coord
s 所以len
是 2,列表中项目的x
和值分别是和。我第一次尝试这个,所以我很可能误解了文档或其他东西。有什么提示吗?y
0,0
0,1
编辑:哦,忘了提,实际的崩溃是PyTuple_Set_ITEM
在线的。