.. _cython: ====================== Cythonでの注意点 ====================== これまでにCPython2/3について述べた事について注意を払えば、 Cythonのソースコード(.pyx)は python2/python3の双方で使うことができます。 Cythonはソースコード (.pyx) からCあるいはCPPのソースコードを作成 します。 注意すべきは、同じ Cythonのソースコード(.pyx) からpython2/Cythonで作成されたc/cppコードとpython3/Cythonで作った c/cppコードには微秒な違いがあります。 Python2/Cython および Python3/Cython の双方でExtensionを作成する場合、同じpyxファイル名を使って python2/pythoん3の双方でそれぞれExtensionを作成する場合、 ビルドの前にcythonが生成したC/C++のソースコードを消去しておく 必要があります。 私が作成した Python_CA、およびcVXI11モジュールでは、 Cythonソースコード(cVXI11.pyxなど)のリンク(cVXI11-2.pyx および cVXI11-3.pyx)を作成しておき、setup.py中では、 .. code-block:: python # cVXI11-2.pyx and cVXI11-3.pyx are hard links to cVXI11.pyx cVXI11_source_PY2="cVXI11-2.pyx" cVXI11_source_PY3="cVXI11-3.pyx" if sys.version_info >= (3,): cVXI11_source=cVXI11_source_PY3 else: cVXI11_source=cVXI11_source_PY2 if not os.path.exists(cVXI11_source): os.link("cVXI11.pyx", cVXI11_source) などとしています。これにより、同じpyxソースコードで、python2/python3では、 それぞれ cVXI11-2.cpp, cVXI11-3.cppをcythonが作成し、これをC++がコンパイルする 事になります。