在非英语Ubuntu上编译Cython .pyx文件(Unicode错误)
我想这可能是某个软件包里的一个错误,我想报告一下,但我不太明白具体错误在哪里,所以我在努力定义这个问题并描述解决方案。
我最近升级到了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,或者你只是尝试了一个不太管用的方法。