问题标签 [cythonize]

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

python - 将 C 代码转换为 Web 程序集时出错

我已经成功安装 Emscripten 并让它在Ubuntu 16.04虚拟机上运行。我还成功地将 helloworld.c 文件转换为 Web 程序集。目前,我正在尝试使用 emscripten 将 python 转换为 Web 程序集。问题是 emscripten 目前不支持 python,因此作为一种解决方法,我尝试使用 Cython 将 python 代码转换为 C,我成功地做到了。尽管尝试将 cython c 文件转换为 Web 程序集时出现错误。这是控制台日志:

根据pyport.h,产生这个错误是因为在一些32位系统中,LONG_BIT被错误地定义为64,而应该是32。我试过注释掉这一行,但这只允许程序静默运行,最后没有生成任何 Web 汇编代码,只有 html 和 javascript。

我在这里读过,这个问题是因为“cmake 正在为头文件选择一个版本的 python dylib 和一个单独的 python 版本”。这是有道理的,因为我最近从 Python 2.7.13-1 降级到 Python 2.7.11-1,因为 Python 2.7.13-1 与 python-dev 包不兼容。虽然,我不知道如何解决这个问题。

有谁知道该怎么做?

0 投票
1 回答
2132 浏览

python - 尝试为 python 包构建 cython 扩展,而不是创建共享对象 (.so) 文件

我尝试使用此处的答案将 cython 扩展的构建添加到我的包中。它目前对代码进行 cythonizes 以从 .pyx 文件生成 .c 文件,但不会创建共享对象 .so 文件,因此当我尝试导入包时,其中一个模块尝试导入共享对象文件它找不到它。

我的 setup.py 文件(这是略微缩减的)是这样的:

如何解决此问题,以便在python setup.py install运行时获取 setup.py 文件以构建共享对象文件?

0 投票
1 回答
567 浏览

numpy - Cython 输入字符串列表

我正在尝试使用 cython 来提高循环的性能,但是在声明输入类型时遇到了一些问题。

如何在我的类型化结构中包含一个字段,该字段可以是“前”或“后”的字符串

我有一个np.recarray如下所示的(注意,recarray 的长度在编译时是未知的)

以及字符串列表的输入和pandas.Timestamp

我正在尝试对以下循环进行cythonize

我的尝试涉及weights在 cython 中将输入作为结构输入,在文件struct_test.pyx中如下

但我收到运行时错误,我认为这与 char[5] position.

此外,我有点不清楚我将如何进行打字contracts以及timestamp.

0 投票
1 回答
295 浏览

numpy - 让我的 cython 代码更高效

我编写了一个 python 程序,我尝试对它进行 cythonize。是否有任何建议如何使 for 循环更有效,因为这需要 99% 的时间?

这是for循环:

这是代码的其余部分:

0 投票
0 回答
81 浏览

python - 如何将 SFML 的错误消息发送给 Cython?

我正在尝试包装 SFML 的错误流以将最后一条错误消息检索到 Python 空间中。

以下是 SFML 如何声明它的错误流(参见源代码):

SFML 说,您可以将上述流重定向到缓冲区(在示例中为文件,但我想最终将其转换为字符串):

我的 .pxd 文件带有一些简单的包装:

还有我的 .pyx 模块:

stringbuf是否也在函数中正确地将错误消息转换为 Python 字符串get_last_error()

更新

我已经设法编译了我的 Cython 代码。我在这里添加了括号:

但是我仍然无法检索 SFML 报告的错误以出现在我上面定义的stringbuf error_buffer调用时get_last_error()(返回值是一个空字符串)。

0 投票
1 回答
310 浏览

python - 默认方法参数不起作用

Cython 似乎没有认识到,sf::RenderTarget.clear()可以使用不同的参数调用该方法,并且只允许调用 .pxd 中最后声明的变体。

SFML 的头文件(源码):

我的 Cython .pxd:

我的 Cython 包装器:

编译错误:Call with wrong number of arguments (expected 1, got 0)

所以我只能调用 whe.clear(color)变量而不是带有默认参数的变量.clear()。我做错了什么?

我的实现试图遵循这里解释的内容,但我无法让它工作。

0 投票
1 回答
1649 浏览

python - Cython:控制 cythonize 停止将编译的 .c 文件从 `.pyx` 文件放入安装目录

我有一个test包含敏感代码的小辅助函数。hello.pyx为了屏蔽此代码,我在 package中编写并使用了该函数mypackage

我可以通过setup.py将包修改为如下内容来构建和使用它:

但是,当我通过python setup.pyor构建/安装它时pip install,生成的 cythonhello.c以及hello.so被放置在安装目录中(在我的情况下~/.local/python2.7/site-packages/mypackage/

我可以手动hello.c从安装目录中删除(只留下hello.so文件)并且包运行良好。

有没有办法可以自动化这个过程,这样我就不需要手动删除编译的c文件?

我查看了这个stackoverflow 问题。但是,当我尝试使用pip wheel .. 另外,在我的情况下,只要安装的代码不包含纯文本文件,我就可以使用 tar.gz 进行安装hello.c

[编辑]

我可以通过在我的. 中使用来停止将.c文件放置在安装目录中。但是,我不确定此选项是否适用于项目中的非 python 文件include_package_data=Falsesetup.py

0 投票
1 回答
737 浏览

python - 子类化 cython 类:“cimport”时找不到 pxd 文件

我刚刚在 cython 中偶然发现了一些奇怪的行为,我希望有人能够启发我。

我有两个包 A 和 B,它们都是使用 distutils 构建的,因为我有几个 cython 类(其中许多包装了 c++ 类)。

在包 AI 中有一个 cython 类,我BaseAClass在 .pxd 文件中声明并在相应的 .pyx 中完全声明它。BaseAClass我在包 A 中有许多其他类的子类。

现在在包 BI 中已经能够构建带BaseAClass成员的类,只需执行

而且我在编译和使用这些类时没有问题。

但是,如果我尝试BaseAClass在包 B 中进行子类化:

我尝试 cythonize 我得到了错误'_A.pxd' not found。但是,如果我这样做

没问题!希望有人知道发生了什么!

请注意,当我编译时,我传递了额外的标志“-I /path/to/packageA/stuff”以确保包 A 中的 pxd 文件可用于包 B。另请注意,我使用了类似的 cythonize.py对于 scipy,我已经__init__.py到处都有文件,我什至尝试添加一个__init__.pxd文件,但它没有帮助。

0 投票
1 回答
257 浏览

python - 无法从 Cython 重定向错误流

我试图 cythonize 的 SFML 库在下面定义了这个函数,它允许更改错误的打印位置(默认情况下,当不调用此函数时,SFML 会将错误消息写入控制台):

我为上述功能简化的 .pxd 文件:

还有我的 .pyx 模块,它编译并运行良好,但不会重定向错误消息(它们仍会打印到控制台)。

我正在使用 MSVC 并与 C++ 代码进行静态链接。

编辑

下面是 SFML 库如何在自己的代码中记录错误的示例(完整源代码):

我的目标是抑制上述错误消息出现在控制台中,并最终将它们重定向到自己的缓冲区中。

0 投票
0 回答
81 浏览

python - Cython 后的 sklearn.mixture 不会变得更快

我是一个 Python 新手,我必须用它做一些简单的工作。

我使用sklearn.mixture方法来处理数据,但是这需要太多时间。

我在这里的某个地方读过并决定对这些功能进行cythonize 。

我已经按照教程描述的方式python setup.py build_ext --inplace处理了所有*.py文件。sklearn.mixture但是,调用这些方法的时间完全一样。我什至重命名了*.py文件,以确保已链接编译的本机库。

我的测试应用程序如下所示:

那么,有人可以告诉我我做错了什么吗?

还有其他方法可以提高性能吗?