2017-11-04 13 views
1

python2.7で開発されたpythonパッケージがありますが、python3.6に移植する必要があります。私はコードのいくつかの部分でcythonを使うので、パッケージには.py.pyxの両方のファイルがあります。2to3のpython2からpython3へのcythonファイルの移植

私はコマンドを試しましたが、私は理解も解決もできないというエラーがありました。

例:私は、次の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は、language_levelhttp://cython.readthedocs.io/en/latest/src/reference/compilation.html#compiler-directivesを参照)を受け入れ、コードをPython 2またはPython 3として解釈する場所を制御します(たとえば、関数またはステートメントとしてprint)。

どのようなコードを生成しても、生成するコードはPython 2またはPython 3で使用するようにコンパイルする必要があります(これは、あなたがインクルードするヘッダによって決まります。生成されたCコードには多くのプリプロセッサ#if PY_MAJOR_VERSION >= 3セクションがあります。

私はこの互換性にいくつかの制限があると思うし、Python 2とのコンパイル時にはすべてのPython 3機能が完全に動作するとは思っていませんでしたが、一般的なルールとして既存のCythonコードlanguage_level=2(既定値)でCythonを実行し、Python 3ヘッダー/ライブラリ(setup.pyがデフォルトで処理する必要があります)を使用してCythonをコンパイルしてください。あなたが一生懸命働かなければならない小さな、特定の問題があるかもしれません。