问题标签 [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.
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 包不兼容。虽然,我不知道如何解决这个问题。
有谁知道该怎么做?
python - 尝试为 python 包构建 cython 扩展,而不是创建共享对象 (.so) 文件
我尝试使用此处的答案将 cython 扩展的构建添加到我的包中。它目前对代码进行 cythonizes 以从 .pyx 文件生成 .c 文件,但不会创建共享对象 .so 文件,因此当我尝试导入包时,其中一个模块尝试导入共享对象文件它找不到它。
我的 setup.py 文件(这是略微缩减的)是这样的:
如何解决此问题,以便在python setup.py install
运行时获取 setup.py 文件以构建共享对象文件?
numpy - Cython 输入字符串列表
我正在尝试使用 cython 来提高循环的性能,但是在声明输入类型时遇到了一些问题。
如何在我的类型化结构中包含一个字段,该字段可以是“前”或“后”的字符串
我有一个np.recarray
如下所示的(注意,recarray 的长度在编译时是未知的)
以及字符串列表的输入和pandas.Timestamp
我正在尝试对以下循环进行cythonize
我的尝试涉及weights
在 cython 中将输入作为结构输入,在文件struct_test.pyx
中如下
但我收到运行时错误,我认为这与
char[5] position
.
此外,我有点不清楚我将如何进行打字contracts
以及timestamp
.
numpy - 让我的 cython 代码更高效
我编写了一个 python 程序,我尝试对它进行 cythonize。是否有任何建议如何使 for 循环更有效,因为这需要 99% 的时间?
这是for循环:
这是代码的其余部分:
python - 如何将 SFML 的错误消息发送给 Cython?
我正在尝试包装 SFML 的错误流以将最后一条错误消息检索到 Python 空间中。
以下是 SFML 如何声明它的错误流(参见源代码):
SFML 说,您可以将上述流重定向到缓冲区(在示例中为文件,但我想最终将其转换为字符串):
我的 .pxd 文件带有一些简单的包装:
还有我的 .pyx 模块:
我stringbuf
是否也在函数中正确地将错误消息转换为 Python 字符串get_last_error()
?
更新
我已经设法编译了我的 Cython 代码。我在这里添加了括号:
但是我仍然无法检索 SFML 报告的错误以出现在我上面定义的stringbuf error_buffer
调用时get_last_error()
(返回值是一个空字符串)。
python - Cython:控制 cythonize 停止将编译的 .c 文件从 `.pyx` 文件放入安装目录
我有一个test
包含敏感代码的小辅助函数。hello.pyx
为了屏蔽此代码,我在 package中编写并使用了该函数mypackage
。
我可以通过setup.py
将包修改为如下内容来构建和使用它:
但是,当我通过python setup.py
or构建/安装它时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=False
setup.py
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
文件,但它没有帮助。
python - 无法从 Cython 重定向错误流
我试图 cythonize 的 SFML 库在下面定义了这个函数,它允许更改错误的打印位置(默认情况下,当不调用此函数时,SFML 会将错误消息写入控制台):
我为上述功能简化的 .pxd 文件:
还有我的 .pyx 模块,它编译并运行良好,但不会重定向错误消息(它们仍会打印到控制台)。
我正在使用 MSVC 并与 C++ 代码进行静态链接。
编辑
下面是 SFML 库如何在自己的代码中记录错误的示例(完整源代码):
我的目标是抑制上述错误消息出现在控制台中,并最终将它们重定向到自己的缓冲区中。
python - Cython 后的 sklearn.mixture 不会变得更快
我是一个 Python 新手,我必须用它做一些简单的工作。
我使用sklearn.mixture
方法来处理数据,但是这需要太多时间。
我在这里的某个地方读过并决定对这些功能进行cythonize 。
我已经按照教程描述的方式python setup.py build_ext --inplace
处理了所有*.py文件。sklearn.mixture
但是,调用这些方法的时间完全一样。我什至重命名了*.py文件,以确保已链接编译的本机库。
我的测试应用程序如下所示:
那么,有人可以告诉我我做错了什么吗?
还有其他方法可以提高性能吗?