gpt4 book ai didi

python - Windows 上的 Cython 内存 View

转载 作者:可可西里 更新时间:2023-11-01 09:20:21 26 4
gpt4 key购买 nike

尝试在 Windows 上使用 Cython(基于 Anaconda 的安装,使用 TDM-GCC,因为我需要对 OpenMP 的支持)时,我在使用类型化内存 View 时遇到了错误。

test1.pyx
def test(int x): pass

test2.pyx
def test(int[:] x): pass

这两个模块都可以使用基本的 setup.py(使用 cythonize)进行编译,但是虽然可以毫无问题地导入 test1,但导入 test2 会引发以下问题:

python3 -c "import test2" (<- Note the use of Python3 -- I haven't tried with Python2)
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "stringsource", line 275, in init test2 (test2.c:13146)
UnicodeDecodeError: 'utf-8' codec can't decode byte in position 1: invalid start byte.

显然,test.c 的第 13146 行没有什么特别之处。

这是一个已知问题吗?还是我做错了什么?欢迎任何帮助。

(从 Cython 用户交叉发布)

说明:

  • 再次请注意,我使用的是 Python 3(事实上,该错误不会出现在 Python 2 中)。
  • 我正在使用 Python 3.4.1 和 Cython 0.20.1 全新安装到 Conda 环境中。
  • 我正在使用以下 setup.py。

    从 distutils.core 导入设置;从 Cython.Build 导入 cythonize设置(ext_modules=cythonize("test.pyx"))

但是更长的 setup.py(例如 Saullo Castro 建议的那个)也无济于事。

赏金 授予 Saullo Castro,因为他指出 MinGW-64 位不受简单支持,即使我最终使用了不同的解决方案。

最佳答案

我正在使用 Windows 7 64 位、Python 2.7.5 64 位和 Cython 0.20.1,您的代码适合我。

我测试了你的原始代码和这个:

def test(int[:] x):
s = np.shape(x)[0]
for i in range(s):
print x[i]

没有问题。我将在这里描述我如何使用 Cython 进行编译以及如何配置我的 C 编译器以与 Cython 一起使用,希望您可以按照这些步骤解决您的问题。

SET DISTUTILS_USE_SDK=1
setenv /x64 /release
  • 编译 Cython(只需执行 python setup.py 即可)

  • 祝您愉快setup.py为你的 .pyx文件,这里是我用来启用对 OpenMP 的支持的示例:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension('test1',
['test1.pyx'],
extra_compile_args=['/openmp', '/O2',
'/favor:INTEL64'])]
setup(name = 'test1',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules)
  • 使用import pyximport; pyximport.install()适用时

关于python - Windows 上的 Cython 内存 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com