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

2 投票
1 回答
587 浏览
提问于 2025-04-18 16:05

我想这可能是某个软件包里的一个错误,我想报告一下,但我不太明白具体错误在哪里,所以我在努力定义这个问题并描述解决方案。

我最近升级到了Ubuntu 14.4,能够用自己的语言使用它让我很开心,但我遇到了一个错误,这个错误是由于语言设置的变化引起的:

当我尝试用distutils编译.pyx文件时,如果文件的路径中包含非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)

编辑 2014年8月18日

一个最小的示例可以在这里找到。似乎import cython这条语句引发了这个问题。

1 个回答

1

我成功地编译了你的例子,不过我把setup

ext_modules=linext,
cmdclass = {'build_ext': build_ext}

里的参数换成了当前Cython文档中推荐的版本:

ext_modules=cythonize(linext)

根据你找到的版本,可能Cython确实有个bug,或者你只是尝试了一个不太管用的方法。

撰写回答