我有一个python2.7下开发的python包,但我需要将它移植到python3.6。我在代码的某些部分使用了cython,因此包中既有.py
和{
我尝试了2to3
命令,但遇到了一个既无法理解也无法解决的错误。在
示例:我有以下test.pyx
文件
# cython: profile=False
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.profile(False)
cpdef sillyfunction():
print 'Thank you for your kind help'
return
我运行2to3 test.pyx
。我得到的是:
你不应该做任何事。Cython接受一个参数
language_level
(请参见http://cython.readthedocs.io/en/latest/src/reference/compilation.html#compiler-directives),该参数控制将代码解释为python2或python3的位置(例如,print
作为函数或语句)。在无论您做什么,它生成的代码都应该是可编译的,以便与python2或python3一起使用(这取决于您所包含的头,这在很大程度上是由构建过程安排的)。在生成的C代码中有许多预处理器
#if PY_MAJOR_VERSION >= 3
部分来确保这一点。在我怀疑这种兼容性有一些局限性,我当然不希望所有的python3特性在针对python2编译时都能完美地工作,但是作为一般规则,您应该能够使用现有的Cython代码,使用
language_level=2
(默认值)在其上运行Cython,然后使用python3头/库(它设置.py它应该可以正常工作。不过,可能有一些小的、具体的问题需要你去解决。在相关问题 更多 >
编程相关推荐