在非英语Ubuntu上编译Cython .pyx文件(unicode错误)

时间:2014-08-05 14:50:00

标签: python gcc numpy encoding cython

所以,我猜这是其中一个涉及的数据包的错误,我想报告它,但我真的不明白错误在哪里,所以我试图定义它并描述解决方案。

我最近升级到Ubuntu 14.4并且非常高兴能够以我自己的语言使用它,当我遇到错误时,这是​​由于语言的变化:

当尝试使用.pyx编译cython distutils文件时,如果文件位于包含非ascii符号的路径中,则编译将以 unicode错误中止。在我的情况下,桌面路径已重命名为德语版本"Arbeitsfläche",在编译时似乎存在问题。

有人可以告诉我这是一个错误还是一个功能(如果是前者,在哪里提交)?

完整性的堆栈跟踪:

Compiler crash traceback from this point on:
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Nodes.py", line 6785, in analyse_declarations
    module_scope = env.find_module(self.module_name, self.pos)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Symtab.py", line 1089, in find_module
    module_name, relative_to = self.parent_module, pos = pos)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 132, in find_module
    pxd_pathname = self.find_pxd_file(qualified_name, pos)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 184, in find_pxd_file
    pxd = self.search_include_directories(qualified_name, ".pxd", pos, sys_path=True)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 225, in search_include_directories
    tuple(self.include_directories), qualified_name, suffix, pos, include, sys_path)
  File "/usr/lib/python2.7/dist-packages/Cython/Utils.py", line 16, in wrapper
    res = cache[args] = f(*args)
  File "/usr/lib/python2.7/dist-packages/Cython/Utils.py", line 101, in search_include_directories
    path = os.path.join(dir, dotted_filename)
  File "/usr/lib/python2.7/posixpath.py", line 80, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 23: ordinal not in range(128)

编辑18.8.2014

可以找到一个最小的例子here。似乎import cython语句触发了行为。

1 个答案:

答案 0 :(得分:1)

在我将参数替换为setup

之后,我设法编译your example
ext_modules=linext,
cmdclass = {'build_ext': build_ext}

使用current cython documentation中鼓励的版本:

ext_modules=cythonize(linext)

根据你找到你的版本的位置,在Cython中确实存在一个错误,或者你只是尝试了一些不起作用的错误。