cython编码报错

问题描述:

appleyuchi@Ubuntu16:~/桌面/test$ cython fib.py --embed

Traceback (most recent call last):
  File "/usr/bin/cython", line 8, in <module>
    main(command_line = 1)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 704, in main
    result = compile(sources, options)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 679, in compile
    return compile_multiple(source, options)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 657, in compile_multiple
    result = run_pipeline(source, options, context=context)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 487, in run_pipeline
    err, enddata = Pipeline.run_pipeline(pipeline, source)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Pipeline.py", line 328, in run_pipeline
    data = phase(data)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/Pipeline.py", line 53, in generate_pyx_code_stage
    module_node.process_implementation(options, result)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/ModuleNode.py", line 118, in process_implementation
    self.generate_c_code(env, options, result)
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/ModuleNode.py", line 352, in generate_c_code
    self.generate_filename_table(globalstate['filename_table'])
  File "/usr/lib/python2.7/dist-packages/Cython/Compiler/ModuleNode.py", line 709, in generate_filename_table
    if root_path.startswith(workdir):

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 17: ordinal not in range(128)


下面是问题重现,代码来自:

https://www.cnblogs.com/yafengabc/p/6130849.html

这个博客中的fib.py如下:

import sys  
reload(sys)  
sys.setdefaultencoding('utf8')  
import time

def fib(n):
    if n==0:
        return 0
    if n==1:
        return 1
    return fib(n-1)+fib(n-2)
t=time.time()
print(fib(10))
print(time.time()-t)

使用python fib.py能直接出结果

但是使用cython fib.py --embed

就会报告上面的错误。

此时在fib.py最上面加入

import sys
reload(sys)
sys.setdefaultencoding('utf8')
会发现报错依旧。

下面是正确的解决方案:

在/usr/lib/python2.7/dist-packages/Cython/Compiler路径下的

Pipeline.py

Main.py

ModuleNode.py

三个文件的开头(root权限下操作)的
from __future__ import absolute_import

这句话的下面加入下面三行即可。

import sys
reload(sys)
sys.setdefaultencoding('utf8')

也就是说,这个报错,其实是cython库的报错,并不是fib.py的报错。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值