问题标签 [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 - 如果在数组创建期间定义了 NumPy 数组的元素,为什么 Cython 需要更多的 Python 调用?
.pyx
如果我在数组创建期间定义数组元素( ),我不明白为什么 Cython 需要更多 Python 调用来编译我的文件#-1-
。
对于元素pos1
和pos2
,PyFloat_FromDouble
被调用四次,每个变量调用两次,但是如果我创建一个空数组或零数组并在之后更改元素 ( #-2-
),则不使用此函数。
我正在使用 Python 2.7.13、NumPy 1.13.1 和 Cython 0.25.2
python - Cython cimport 找不到 .pxd 模块
已解决,请参阅编辑#3
假设一个包的结构如下:
我在哪里definition.pxd
:
在helper.pxd
我有:
在helper.pyx
我什么都没做cimport
。我配置setup.py
为:
现在我的问题是python setup.py build_ext --inplace
我可以成功构建.so
,但是当我尝试时,import some_package.helper.helper
我得到了ImportError
:
ImportError: No module named "some_package.helper.helper"
我调查helper.cpp
并发现了一些类似的行:
我想这可能与导入路径有关,但我无法发现问题所在。所有__init__.py
的都是空的,我absolute_import
在每个文件中都导入了。我也更改了include_dirs
,但仍然无法正常工作。
编辑#1
根据文档,include_dirs
添加到*.pxd
搜索路径。所以我也尝试将cimport
语句更改helper.pxd
为:
这一次,cython
无法编译:"definition.pxd" not found
. 但是,它应该在搜索路径中。
编辑#2
快速锻炼是添加一个空definition.pyx
的 in core/
,然后将扩展配置为:
然后在setup.py
:
现在cimport some_package.core.definition
正在工作helper.pxd
。
然而,这并不优雅。
编辑 3
我终于发现我忽略了一些行,例如:
但是,在.pxd
文件中,不能有任何可执行代码。在这种情况下,它似乎Cython
将其视为一个包,而不是有.pyx
文件。
可能有两种方法可以解决:
cdef extern
从一个C
标题。总结内联函数。
python - Cython:将 INFINITY 或 numpy.inf 分配给类型化变量结果为 0
我希望在一个名为的文件中有cdef
一个常量,以便我可以在其他地方使用它。假设我们有:INFINITY
constant.pxd
cimport
constant.pxd
但是,这不起作用,例如,在另一个.pyx
文件中:
产生:
我也尝试INF
直接定义为np.float32('inf')
or np.inf
。但是,它们最终都为零。
但是,我可以INF = np.float32('inf')
在不输入.pyx
文件的情况下定义它,constant.pyx
并按预期使用它。我不清楚这是否会导致执行问题,如果我们有,说:
与:
python - Cython C++ 包装器中的未定义符号
我有一个工作cpp
项目,可以很好地使用cmake
. 现在我需要为它创建一个 Python 包装器。所以我选择cython
弥合C++
和之间的差距Python
。
我没有在文件中编写CMakeLists.txt
逻辑pyx
,而是尝试cmake
自己编译库,然后将 Cython 包装器包装在它周围。以下是setup.py
文件:
这是call_core.pyx
文件:
现在,如果我getVal()
在头文件本身中实现该方法,则此文件可以正常工作。但是,一旦我将实现移到.cpp
文件中,Cython 编译器就会显示以下错误:
注意:上面的代码片段非常适合在.h
文件中实现的功能。
python - 使用 distutils 编译 Cython 代码时出现问题
我正在尝试编译 Cython 代码并将其用作 Python 模块。我遵循了 Cython 的基本教程。我已经制作了文件 hellowolfrd.pyx:
我已经制作了 setup.py:
并运行:
但不幸的是出现了错误:
似乎 gcc 对 python3.5 库不满意。我尝试使用以下命令在没有 distutils 的情况下进行编译:
它奏效了。从知道我可以从 Python 解释器导入 helloworld。但我不知道如何使用 distutils 编译 Cython 代码。我尝试使用 extra_compile_args 传递相同的标志,但没有奏效。
UPD:发现 gcc 找不到 python 的 64 位库,所以试图显式显示库目录。所以我改变了 setup.py
仍然是相同的输出
python - Cython 编译错误“常量表达式中不允许”
以下
工作正常。但是当我尝试这个时:
我收到以下错误:
添加装饰器是因为找到了这个相关的 stackexchange 帖子并阅读了 Kurt W. Smith 的 Cython 书。据我所知,这应该可以告诉 Cython 不要担心可能由动态索引变量导致的越界错误,但由于某种原因它没有。我还尝试在编译器选项和全局范围内更改边界检查,但无济于事。
如果不是因为 Cython 文档声称是最新的,我会认为 boundscheck 已经贬值了。
swig - PyBind - 重载函数
首先,我感谢你们所有人试图解决我的这个疑问。我正在努力将一个最小的 C++ 项目转换为在 Python 中使用。这种努力背后的真正原因是为了速度。
我遇到了 PyBind,对它的功能以及它们提供的大量文档感到非常惊讶。现在有一些事情停止了工作,因为我不知道该怎么做。考虑文件“MySource.hpp”中的以下代码,您能告诉我如何进行绑定吗?
我能够将 Point3D 的绑定定义为一个类及其某些成员函数。但我不知道如何为重载方法“ VectorCross ”进行绑定。它有两种方法,一种接受 Point3D 的实例,另一种接受指向浮点数组的指针。
到目前为止我写的绑定如下所示
有人可以指导我如何做到这一点吗?
python - 如何在编译之前调试 cython 代码?
我最近遇到了cython 的 sentdex 教程。在尝试他的教程代码时,我注意到我们将如何在编译之前调试我们的 cython 代码。
example_original.py
我们可以通过在解释器中运行来调试原始代码。
但是 cythonized 代码不起作用。这是我尝试过的两种方法
1)py文件
错误
2).pyx 文件
错误
在编译之前调试 cython 代码的正确方法是什么?
python - Cython 在单独的目录中编译模块
我是cython的新手。
我有以下目录结构。
你好世界.py:
打印名称.py:
设置.py:
我遇到的问题是,当我python setup.py build_ext --inplace
在cython_program
目录中使用编译程序时。它确实成功编译了程序并printname.c
在 lib 文件夹中生成了一个文件。
但是当我将 printname.py 和 helloworld.py 移动到一个单独的文件夹以确保我的 cython 编译代码正在运行时。它给了我以下错误 ImportError: No module named lib.printname
。
为什么不使用主helloworld.py
文件编译模块(lib.printname)?
注意:如果我将 helloworld.py 和 printname.py 保存在同一个文件夹中,这会很好。
提前致谢。
python - cython 打印大于 65535 的错误值
我认识到将数字传递给 cython 中的函数的奇怪行为,其值大于 65535。但这只有在将这些数字传递给函数时才会出现。如果我将它们定义为
一切正常。为了澄清我的问题,我通过了我用来调查这个问题的两个虚拟函数
以及被调用以获取“.pyd”文件的“setup.py”。
之后我用命令创建了“.pyd”文件
使用命令提示符。使用的 c 编译器是 gcc。
如果我然后调用“bigNum1”或“bigNum2”,将产生以下输出。
如您所见,所有大于 65535 的数字都显示错误,使用 bigNum2。跟着你看到这个函数的调用。
我希望你能理解我的问题。我的猜测是,我在 bigNum2 中做了错误的声明,导致类型错误,或者我必须在将数字传递给此方法之前进行某种类型转换。
编辑:
这是cmd提示符过程中显示的文字
编辑2:
我使用 cython 0.25.2 附带的 Winpython 包“WinPython 3.6.1.0Qt5-64bit”。但我用 pip 升级它以获得最新版本。
首先,我尝试使用此处的教程获取我的 .pyd。
http://docs.cython.org/en/latest/src/quickstart/build.html
但在构建过程中,我收到一条错误消息“错误:无法找到 vcvarsall.bat”。这就是为什么我决定将 Mingw 与 gcc 一起使用。但这也产生了一个错误,在这篇文章中有描述。
我用 Indrajit Kanjilal 的回答解决了这个问题。我们现在就在那里。我可以创建一个 .pyd 文件,可以调用该函数,但如果该值大于 65535,则会发生错误。希望有帮助。