使用2to3将cython文件从python2移植到python3

2024-04-19 20:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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。我得到的是:

^{pr2}$

Tags: 文件代码pytest命令false示例错误
1条回答
网友
1楼 · 发布于 2024-04-19 20:26:10

你不应该做任何事。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它应该可以正常工作。不过,可能有一些小的、具体的问题需要你去解决。在

相关问题 更多 >