Python Cython记忆窗口上的视图

Python Cython记忆窗口上的视图,python,windows,cython,Python,Windows,Cython,在Windows上尝试使用Cython(基于Anaconda的安装,使用TDM-GCC,因为我需要OpenMP支持)时,在使用类型化MemoryView时遇到错误 test1.pyx def test(int x): pass test2.pyx def test(int[:] x): pass 这两个模块都可以使用basic setup.py(使用cythonize)进行编译,但是虽然可以毫无问题地导入test1,但是导入test2会引发以下问题: python3 -c "import t

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

test1.pyx
def test(int x): pass

test2.pyx
def test(int[:] x): pass
这两个模块都可以使用basic 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.

python3-c“import test2”(我使用的是64位Windows 7、64位Python 2.7.5和Cython 0.20.1,您的代码适合我

我测试了您的原始代码,如下所示:

def test(int[:] x):
    s = np.shape(x)[0]
    for i in range(s):
        print x[i]
没有问题。我将在这里描述我是如何由Cython编译的,以及我是如何配置我的C编译器以与Cython一起使用的,希望您能够按照以下步骤解决您的问题

  • 下载并安装Microsoft SDK C编译器

  • 在Windows中配置编译环境,对我来说是:

  • 编译Cython(只需执行
    python setup.py
    即可)

  • 为您的
    .pyx
    文件准备了一个漂亮的
    setup.py
    ,下面是我用来支持OpenMP的示例:

  • 如果适用,请使用导入pyximport;pyximport.install()

事实证明,最简单的解决方案就是将所有内容切换到32位,因为TDM-GCC 32位工作正常,而且我对64位Python没有任何硬依赖性。

您可以发布Cython版本吗?然后我们可以重新生成C文件,并查看第13146行的内容。TDM-GCC也出现了同样的问题,但如果我使用MSVC,这个问题就会消失。嗯……可能是GCC与MSVC的兼容性问题?我还没有尝试使用Microsoft SDK,我相信我使用python3的事实更重要,因为我在使用TDM-GCC的python2中没有看到任何错误。我还尝试了你的setup.py(没有额外的编译参数)这也没用。@antony SDK是官方编译器,如果您使用64位@SaulloCastro,我想antony可能会坚持使用GCC,因为对VC 2010或2008的OpenMP支持不是免费的。它们只在非express版本中。@ShawnWang但是我使用的SDK带有@SaulloCastro的OpenMP支持,我想不,从这里可以吗请告诉我们如何…?+1,但我会继续尝试64位版本:)@SaulloCastro非常感谢您的投入和讨论。。。我完全同意。我会祈祷有一天64位也能工作:)顺便说一句,安东尼,我在这里得到了一个帖子,如果最终有解决方案,我会在这里更新!
SET DISTUTILS_USE_SDK=1
setenv /x64 /release
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)