2017-11-04 9 views
1

나는 python2.7에서 개발 된 파이썬 패키지를 가지고 있지만 파이썬 3.6으로 포팅해야한다. 코드의 일부에서 cython을 사용하므로 패키지에 .py.pyx 파일이 모두 있습니다.파이썬 2에서 파이썬 2로 파이썬 2로 이식하기

나는 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를 실행합니다. 내가 얻는 것은 :

[email protected]:~$ 2to3 test.pyx 
RefactoringTool: Skipping optional fixer: buffer 
RefactoringTool: Skipping optional fixer: idioms 
RefactoringTool: Skipping optional fixer: set_literal 
RefactoringTool: Skipping optional fixer: ws_comma 
RefactoringTool: Can't parse test.pyx: ParseError: bad input: type=1, value=u'cython', context=(u' ', (2, 8)) 
RefactoringTool: No files need to be modified. 
RefactoringTool: There was 1 error: 
RefactoringTool: Can't parse test.pyx: ParseError: bad input: type=1, value=u'cython', context=(u' ', (2, 8)) 

답변

2

아무 것도 할 필요가 없습니다. Cython은 코드를 Python 2 또는 Python 3 (예 : print을 함수 또는 명령문으로 해석하는 부분)을 제어하는 ​​인수 language_level (http://cython.readthedocs.io/en/latest/src/reference/compilation.html#compiler-directives 참조)을 허용합니다.

생성하는 코드는 파이썬 2 또는 파이썬 3과 함께 사용하도록 컴파일 할 수 있어야합니다 (이는 빌드 프로세스에 의해 크게 정렬되는 어떤 헤더에 의해 결정됩니다). 이를 보장하기 위해 생성 된 C 코드에는 많은 프리 프로세서 (#if PY_MAJOR_VERSION >= 3) 섹션이 있습니다.

이 호환성에 몇 가지 제한이 있다고 생각합니다. 파이썬 2에 대해 컴파일 할 때 모든 Python 3 기능이 완벽하게 작동 할 것이라고는 기대하지 않지만, 일반적으로 기존 Cython 코드를 사용할 수 있어야합니다. Cython을 language_level=2 (기본값)으로 실행 한 다음 Python 3 헤더/라이브러리 (setup.py가 기본적으로 처리해야 함)를 사용하여 컴파일하면 제대로 작동합니다. 소규모의 특정 문제가있을 수 있습니다.