Cython מאפשרת כתיבת מודולי הרחבה ל-CPython. קוד פייתון רגיל יכול להשתמש בהרחבות אלו בצורה דומה למודולי פייתון. בשונה מקוד פייתון, Cython מתקמפל לשפת C, והקוד עושה שימוש בקריאות ישירות ל-CPython ולספרייה הסטנדרטית. הודות לטכניקה זו זמן הריצה של פונקציות הנכתבות ב-Cython לרוב קצר יותר, אך יוצר תלות בין המודול לבין מפרש הפייתון והספרייה הסטנדרטית.
Cython היא נגזרת של שפת Pyrex והיא מרחיבה את האופטימזציות והיכולות שלה. השפה נוצרה כפיצול מ-Pyrex ב-2007 על ידי מפתחי התוכנה המתמטית Sage, שיצרו את SageX. לאחר שמתכנתים רבים הורידו את Sage רק כדי להשתמש ב-SageX, וכיוון שמתכנתים של הרחבות אחרות (LXML), תחזקו פיצולים משלהם לPyrex, הוחלט להוציא את SageX מSage, ולאחדו עם cython-lxml.
Cython נפוצה בשימוש בקרב מתכנתי פייתון המפתחים תוכנות וספריות מדעיות, ובפרט תוכנת המתמטיקה Sage וספריות הפייתון הפופולריות SciPy, pandas ו-scikit-learn.
דוגמת קוד
מקובל להשתמש בהרחבת distutils לצורך קימפול, ומאחר ש-Cython מתממשקת עם Python C API מקובל להגדיר מספר קבצים:
קובץ setup.py שעושה שימוש ב-distutils לצורך בנייה ויצירת המודול
תוכנית פייתון שעושה שימוש במודול המרחיב
קובצי קוד Cython
דוגמת הקוד הבאה מסבירה את תהליך הקימפול וההרצה של תוכנית פשוטה:
# hello.pyx - Python Module, this code will be translated to C by Cython.defsay_hello():print"Hello World!"
# launch.py - Python stub loader, loads the module that was made by Cython.# This code is always interpreted, like normal Python.# It is not compiled to C.importhellohello.say_hello()
# setup.py - unnecessary if not redistributing the code, see belowfromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(name='Hello world app',ext_modules=cythonize("*.pyx"))
לקימפול, ואחר כך להרצת התוכנית נדרשות הפקודות הבאות: