Imam Ferianto Blogs

sekedar catatan kecil saja

Cython adalah module python yang dapat menconversi source file python (.py atau .pyx) ke file kode file bahasa c. Dengan melakukan konversi ke c, maka dapat dibuat binary executable . Ini merupakan salah satu langkah mendistribusikan program yang dibuat dengan python sehingga source kode python kita aman, Selain itu dengan bentuk binary maka performance aplikasi akan naik karena tidak memerlukan precompile untuk menjalankanya.

#Requirement module:

brew install cython
pip3 install Cython

######## Setup path #####

nano /Users/feri/.zshrc

Tambakan kode berikut pada ahir baris:

export PATH=$PATH:/usr/local/Cellar/[email protected]/3.8.2/Frameworks/Python.framework/Versions/3.8/bin/

Jalankan source agar path dapat diload ke environtment:

source  /Users/feri/.zshrc

######## Compile Multi Module ########

#Untuk compile multi module, Buat file dengan nama: compile.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
    Extension("mymodule1",  ["mymodule1.py"]),
    Extension("mymodule2",  ["mymodule2.py"]),
#   ... all your modules that need be compiled ...
]

setup(
    name = 'My Program Name',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
)

#Cara mengcompile:

python3 compile.py build_ext --inplace

#Output (dapat dipanggil dengan perintah python import ):

mymodule1.py.xxxx.so

######## Compile Single Module ########

buat file dengan nama setup.py

from setuptools import setup
from Cython.Build import cythonize
setup(
    ext_modules = cythonize("main.py",compiler_directives={'language_level' : "3"})
)

Cara mengcompile:

python3 setup.py build_ext --inplace

Output:

build folder, file.so

 

######## Compile Native Binary C Standar ########

buat file: main.py

def main():
  print("hello python")
main()

konversi main.py ke main.c :

cython --embed -o main.c main.py

compile main.c ke main atau main.exe :

gcc `python2-config --cflags --ldflags` main.c -o main

#hasil Compile:

binary file: main atau main.exe

#Jalankan dengan :  ./main

#Screenshoot

 

#Notes: Bila ada error compile gcc, kemungkinan versi cython dan pythonnya tidak compatible

 

#Rereferensi:

https://medium.com/@xpl/protecting-python-sources-using-cython-dcd940bb188e
https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html
https://riptutorial.com/cython
https://code.tutsplus.com/tutorials/speeding-python-with-cython–cms-29557
https://towardsdatascience.com/use-cython-to-get-more-than-30x-speedup-on-your-python-code-f6cb337919b6
http://okigiveup.net/an-introduction-to-cython/
https://github.com/adrn/cython-tutorial
https://realpython.com/cpython-source-code-guide/