问题标签 [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 投票
2 回答
3773 浏览

python - 使用 python 从 FireFox 检索当前 URL

我想知道从 python 模块运行 firefox 实例时活动选项卡的当前 url 是什么。FireFox 是否有任何 API 并且 python 知道可以使用它吗?

0 投票
1 回答
882 浏览

python - 在 Python C API 中使用多个模块/类型?

我有两个不同的 Python 扩展模块;我们称它们为 A 和 B。模块 A 包含一个称为容器的存储类类型,我想在模块 B 中将其用作类方法的返回类型。

我似乎找不到任何关于我应该如何执行此操作的文档。我大致按照这篇文章来创建模块/类,除了我没有将所有方法声明为静态的,所以它们可以访问: http: //nedbatchelder.com/text/whirlext.html

那么我的问题是,如何创建一个容器实例,我可以将其作为模块 B 中类方法的 PyObject* 返回值传回?容器定义如下所示:

我尝试在相关方法中简单地执行以下操作,其中 container_init 是我为容器类注册为 tp_init 的方法:

然而,根据 Python 解释器,我正在取回调用该方法的类。(即,myclassinstance.mymethod() 正在返回 myclassinstance)。

我显然是以错误的方式解决这个问题,但我不知道正确的方法是什么。有什么建议么?只是为了切断任何人的建议——不,我对使用 SWIG 或 Boost::Python 不感兴趣。我已经尝试过了,容器的底层存储类也不能很好地使用(SWIG 甚至无法解析它)。到目前为止,自己进行扩展非常轻松,但我对这个感到难过。

0 投票
2 回答
623 浏览

python - 无法在 Python C 扩展中调用方法

我正在制作我的第一个 Python C 扩展,它定义了一些函数和自定义类型。奇怪的是自定义类型正在工作,但不是常规功能。顶级 MyModule.c 文件如下所示:

我正在使用这个 setup.py 文件构建扩展:

“DoStuff”文件将其功能定义为:

有趣的是 MyCustomType 类型工作正常,因为我可以实例化它:

我从自定义类型的 new 和 init 方法中看到我的 printf() 语句打印出来了。但是,此代码失败:

我收到以下错误: Traceback(最近一次调用最后一次):文件“MyModuleTest.py”,第 9 行,在 mymodule.doStuff(缓冲区)中 AttributeError:“模块”对象没有属性“doStuff”

这里发生了什么?我的模块的方法声明中是否有一些错误?

0 投票
1 回答
669 浏览

python - Python 扩展不能使用 library_dirs

在 Python distutils.core.Extension 中指定 library_dirs 时,我在尝试构建时收到此错误:

为什么是这样?我在 Mac OS X 上使用 Python 2.5。

0 投票
1 回答
9567 浏览

c++ - .so 模块未在 python 中导入:动态模块未定义 init 函数

我正在尝试为 C 函数编写一个 python 包装器。编写完所有代码并编译后,Python 无法导入模块。我正在按照此处给出的示例进行操作。在修正了一些错别字后,我在这里复制它。有一个文件 myModule.c:

由于我在使用 Macports python 的 Mac 上,我将其编译为

但是,当我尝试导入它时出现错误。

为什么我不能导入?

0 投票
2 回答
1059 浏览

c++ - 在 IronPython 的解释器 (ipy.exe) 中导入 *.pyd 库

按照这个例子,我创建了一个小 hello.pyd 库文件,其内容在这个问题的末尾。

当我输入 python 解释器时,我得到以下信息:

但是尝试使用 IronPython 的解释器会产生错误:

如何让 ipy 解释器接受这个 C++ 编译库?


你好模块.cpp


安装程序.py


编译如下

0 投票
1 回答
16792 浏览

python - 使用 Python 的 C API 创建一个对象

假设我将对象布局定义为:

...和我的类型定义:

如何pyfoo在我的 C 扩展中创建某个位置的新实例?

0 投票
4 回答
1915 浏览

python - 使用 C 扩展或 Cython 优化非平凡 Python 应用程序的教程

Python 社区发布了有用的参考资料,展示了如何分析 Python 代码,以及 C 或Cython中 Python 扩展的技术细节。我仍在寻找教程,但是,对于非平凡的 Python 程序,以下内容:

  1. 如何通过转换为 C 扩展来识别将从优化中受益的热点
  2. 同样重要的是,如何识别不会从转换为 C 扩展中受益的热点
  3. 最后,如何从 Python 到 C 进行适当的转换,无论是使用 Python C-API 还是(甚至可能更好)使用 Cython。

一个好的教程将为读者提供一种方法论,说明如何通过一个完整的示例来推理优化问题。我没有成功找到这样的资源。

你知道(或者你写过)这样的教程吗?

为了澄清起见,我对涵盖以下内容的教程不感兴趣:

  • 使用 (c)Profile 分析 Python 代码以测量运行时间
  • 使用工具检查配置文件(我推荐RunSnakeRun
  • 通过选择更合适的算法或 Python 结构进行优化(例如,用于成员资格测试的集合而不是列表);本教程应该假设算法和 Python 代码已经是最优的,并且我们正处于 C 扩展是下一个逻辑步骤的地步
  • 重述有关编写 C 扩展的 Python 文档,该文档已经非常适合作为参考,但不能用作说明何时以及如何从 Python 迁移到 C 的资源。
0 投票
2 回答
610 浏览

python - 数据损坏:错误在哪里‽

上次编辑:我已经弄清楚问题出在哪里(请参阅下面我自己的答案),但我无法将问题标记为已回答,看起来。如果有人可以回答我在下面的答案中提出的问题,即这是 Cython 中的错误还是此 Cython 的预期行为,我会将该答案标记为已接受,因为这将是从中获得的最有用的教训,恕我直言.


首先,我必须首先说我已经尝试了三天来解决这个问题,而我只是把头撞在墙上。尽我所能从文档中得知,我做事正确。显然,我不能正确地做事,因为如果我是,我不会有问题(对吧?)。

无论如何,我正在将 mcrypt 绑定到 Python。它应该适用于 Python 2 和 Python 3(尽管它未经 Python 2 测试)。它可以在我的网站上找到,链接是因为它太大而无法包含在帖子中,并且鉴于我不知道做错了什么,我什至无法隔离可能是问题代码的内容。显示问题的脚本也在我的网站上。该脚本只提供了 100 个块,除了字母“a”(加密算法/加密模式使用的任何块大小),当然应该得到一个“a”块作为往返的结果。但它不会(总是)。这是一次运行的输出:

奇怪的是,对于给定的(算法,模式)对,它是完全相同的。我可以更改算法,它会导致不同的往返,但是当我不更改算法时,每次运行总是相同的。我完全被难住了。此外,正如您在上面的输出中看到的那样,总是有两个块连续损坏:块 5 和 6、13 和 14 等。所以,有一个模式,但无论出于何种原因,我都无法弄清楚该模式准确地指向什么。

我意识到我可能在这里问了很多问题:我无法隔离一小段代码,并且可能需要熟悉 mcrypt 和 Python。唉,经过三天的努力,我需要稍微远离这个问题,所以我在这里发布这个问题,希望也许当我正在解决这个问题时,或者(a)某人将看到我在哪里引入了错误,(b) 当我稍后回到问题时,我将能够看到我的错误,或者 (c) 某人或我自己可以找到可能不是我的代码中的错误的问题,但是绑定过程或库本身中的错误。

我没有做的一件事是尝试使用另一个版本的 mcrypt 库。我正在使用 Cython 0.13、Python 3.1 和 mcrypt 2.5.8 进行工作,所有这些都由 Ubuntu 在 Ubuntu 10.10 中分发(除了 Cython,我从 PyPi 获得的)。但是我使用运行良好的 PHP 应用程序管理系统,并且在 Ubuntu 10.10 上使用 mcrypt 没有数据损坏,所以我没有理由相信它是 mcrypt 的构建,所以只是留下......好吧,我在某个地方出了点问题, 我认为。

无论如何,我非常感谢任何可以提供帮助的人。我开始觉得自己快疯了,因为我已经连续几天一直在研究这个问题,我觉得解决方案可能就在我面前,但我看不到它。

编辑:有人指出我应该使用 memcpy 而不是 strncpy。我这样做了,但是现在,测试脚本显示每个块都不正确。让我比以前更加困惑……这是pastebin上的新输出。

编辑 2:我已经回到计算机并再次查看它,我只是在各处添加打印语句以查找可能出错的地方。raw_encrypt.step(input) 函数中的以下代码:

第一个打印语句显示了预期的内容,即传入的明文。但是,第二个显示了完全不同的内容,它应该是相同的。似乎 Cython 发生了一些我不完全理解的事情。

0 投票
1 回答
303 浏览

python - 在 exe 中使用从 DLL 导出的 Python 对象

我有一个由两部分组成的事件生成器:

pyglobalexe(模拟事件的存根)

pyglobalextension

这两个文件都编译得很好。pyglobalexe.exe 在PyObject_CallMethod通话中崩溃。我必须更改什么才能在 pyglobalexe 中使用来自 pyglobalextension 的 event_queue 全局?

===编辑===

对不起,应该使用例更清楚。

命令提示符 1(运行 python.exe)

命令提示符 2(一旦我在命令提示符 1 中完成)。

我希望我能够回到命令提示符 1 和 q.get() 10 个数字。