问题标签 [pyobject]

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

python - 在 C++ 中通过继承自定义 PyObject

长期 Python 程序员,第一次 C++ 扩展编写者。无论如何,为了好玩,我正在尝试在 C++ 中为 python 创建一个链表模块。这是我的代码

我可以这样做吗?大多数文档都是针对 C 的,但是我可以从 PyObject 继承并像这样返回它吗?现在有效的是:

但是一旦我调用l.get_value()python,我就会得到一个段错误。我知道我所做的可能是错误的,所以有人会这么好心地指出我正确的方向吗?

为了澄清起见,我知道LinkedList<char*>命名的“ll”在linkedlist_new函数完成后被销毁,这是我遇到的问题的一部分。让我们假设我非常非常迷失......

0 投票
1 回答
1011 浏览

python - 将 PyObject* 转换为 C++ 对象

我有一个共享库(util.so),它将以下内容返回给 python:

我使用以下命令从我的 python 脚本中调用该方法:

Python:

当我将它传递给我的其他测试库 (test_library.so) 时,它作为 PyObject* 传递,我如何访问我的 test_library.so 中的 cv::Mat?:

Python:

C++

目前,我的 test_library 没有与 util 链接,它们是单独的 .so 文件。

0 投票
1 回答
1983 浏览

julia - Julia:将 PyObject 转换为数组

在 Julia 中,我正在调用 Python 模块 pandas_datareader 从网络下载数据:

变量 gdp 是一个 PyObject 对象。因此,我无法操纵它(以日志为例)。如何将其转换为数组?我试过 convert(Array{Float64,2},gdp),但它只会让 Julia 崩溃。

谢谢!

0 投票
1 回答
727 浏览

python - 使用 Python C-API 定义内部类

在 Python 中,定义内部类很简单:

...可以按照预期访问内部类,例如通过执行MyClass.MyInnerClass.

我正在尝试使用扩展模块设置类似的东西。通常,将定义的扩展类型添加到模块<modulename>init()函数中的扩展模块对象,代码如下:

为了设置内部类,我改变了这种方法来尝试添加 aPyTypeObject*作为 another 的属性PyTypeObject*,如下所示:

......我认为PyObject_SetAttrString()可以作为C-API 文档中“类型对象”的介绍特别说明:

可以使用任何PyObject_*()PyType_*()函数来处理类型对象 […]

…我PyType_Modified()根据文档中的描述添加了调用。但是这样:当我编译所有内容并尝试加载扩展时,我收到了这个错误:

……我想我的做法是错误的;我应该尝试什么?

0 投票
1 回答
6253 浏览

python - 使用 Py_BuildValue() 在 C 中创建元组列表

我正在尝试使用Py_BuildValue()在 C 中创建元组列表。

我正在尝试构建的内容如下所示:

我不知道编译时要创建的元组数量,所以我不能在这里使用一些静态数量。

基本上Py_BuildValue()在这里使用一个元组是代码的样子:

但这仅适用于一个元组。我需要在列表中有多个可以通过 for 循环添加的元组。我怎样才能做到这一点?

0 投票
1 回答
1015 浏览

python - 访问python对象指针数据

我有一个 python set,其中包含一组我想要处理的具有统一类型的不可散列的 python 对象。

为了提高我的算法的效率,我想使用 ctypes 与仅接受uint64作为数据值的外部索引实现进行接口。

我希望我可以将指向 python 对象的指针引用传递到这个外部库中uint64

我试过ctypes.cast(ctypes.py_object(my_python_object), ctypes.c_uint64)了,但我得到了ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

另外,反过来呢,获取对 python 对象的引用uint64并将其转换为“真正的”python 对象呢?

0 投票
1 回答
590 浏览

python - PyVarObject的实际使用,cpython的PyObject的变长子类型

作为最近一直在尝试 Python C-API 的人,我很好奇PyVarObject文档说它PyObject专门用于定义可变长度类型的子类型——尽管需要注意的是:

这种类型在 Python/C API 中不常出现

... 有大量记录在案的支持结构插槽挂钩和其他 API 细节,以至于PyVarObject我真的很好奇是否存在任何 Python-API 相关的问题(但特别是利基)缓解解决方案。

0 投票
1 回答
1701 浏览

python - Python,Gtk3:如何在其他东西运行时使进度条跳动

基于类,我有一个包含一个buttonprogressbar的窗口,每当单击按钮时,都会发生两件事:

1 - 应将对话框中的输入值传递给class ABCD

2 - 当我们的班级ABCD()做他的事情时,我们的进度条是否应该定期跳动,直到班级 ABCD() 完成过程。

所以问题是进度条只脉冲一次,然后卡在那里直到类 ABCD() 完成,然后它开始有规律地脉冲。

这是我的尝试:

正如我们在这里看到的,我已经尝试在这部分代码中制作脉冲并刷新窗口

否则,因为my class ABCD()time.sleep(10)应该只在 10 秒后才停止该时间的进度条脉冲。

这段代码应该如何,我需要有人为我提供正确的代码,几乎没有解释。

0 投票
0 回答
476 浏览

dynamic-memory-allocation - Python C 扩展 - 尽管返回的 PyObjects 上的 Refcount = 1,但内存泄漏

我使用 Python C API 反复调用我用 C++ 编写的 Python 模块。我的 python 程序反复调用我的模块的pyParse函数,该函数做了很多事情并返回PyTuple包含更多PyTuple对象作为元素的 a。每个返回的对象都以PyObject->refcnt1 结束,所以你知道当它超出 python 的范围时应该删除该对象。我用类似下面的python代码反复调用这个模块:

这个循环运行的时间越长,内存使用量就会越多。每次迭代都会产生大约 2kb 的元组(应该在每次迭代结束时销毁)。然而,当我拍摄“堆快照”并在以后多次迭代时将早期的快照与另一个进行比较时,您可以看到调用的内存分配PyTuple_New和其他 python 对象不断增长。

似乎每个 PyObject 都存在内存泄漏,例如 PyTuple_New

然而,因为每个返回的对象都有 1 作为引用计数,所以我希望它在超出 python 的范围后会被销毁。最后,我的程序在read access violation代码的随机部分结束。有什么我想念的吗?或者有谁知道如何调试这个并更好地处理正在发生的事情?我很绝望!

0 投票
0 回答
1479 浏览

python - ld:警告:无法为 _ffi_call_unix64 创建紧凑展开:不使用基于 RBP 或 RSP 的框架 x86_64 架构的未定义符号:

我试图从这里将 Python.framework 包含到 iOS 中。

我收到以下错误:

ld:警告:无法为_ffi_call_unix64创建紧凑展开:不使用基于RBP或RSP的框架x86_64架构的未定义符号:“_adler32”,引用自:Python中的_zlib_adler32(zlibmodule.o)“_sqlite3_user_data”,引用自:__pysqlite_func_callback Python(connection.o) __pysqlite_step_callback in Python(connection.o) “_sqlite3_value_blob”,引用自: __pysqlite_build_py_params in Python(connection.o) “_sqlite3_value_bytes”,引用自: __pysqlite_build_py_params in Python(connection.o) “_sqlite3_value_double”,引用自:Python中的__pysqlite_build_py_params(connection.o)“_sqlite3_value_int64”,引用自:Python中的__pysqlite_build_py_params(connection.o)“_sqlite3_value_text”,引用自:Python 中的 __pysqlite_build_py_params(connection.o) “_sqlite3_value_type”,引用自:Python 中的 __pysqlite_build_py_params(connection.o) “_zlibVersion”,引用自:Python 中的 _PyInit_zlib(zlibmodule.o) ld: symbol(s)未找到架构 x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)链接器命令失败,退出代码为 1(使用 -v 查看调用)链接器命令失败,退出代码为 1(使用 -v 查看调用)