خانه / برنامه نویسی / محافظت از کدهای پایتون با سایتون (Cython) – گیت

محافظت از کدهای پایتون با سایتون (Cython) – گیت

protecting-python-sources-using-cython

محافظت از کدهای پایتون یک چالش برای توسعه دهندگان پایتون است. فایل های کامپایل شده پایتون (pyc) قابل دیکامپایل شدن هستند و با روش های مهندسی معکوس به راحتی می توان به محتوای آنها دسترسی پیدا کرد.

سایتون چیست؟

سایتون (Cython) یک کامپایل بهینه ساز استاتیک است که ماژول های پایتون شما را به فایل های با عملکرد بالای زبان سی ترجمه می کند. فایل های زبان سی می توانند به کتابخانه های بومی باینری کامپایل شوند. وقتی کامپایل انجام می شود هیچ راهی برای تبدیل کتابخانه های کامپایل شده به سورس قابل خواندن پایتون وجود ندارد.

سایتون از پایتون ۲ و ۳ و سینتکس مدرن async/await syntax پشتیبانی می کند. بر اساس تجربه نویسنده این مقاله تنها کاری که نمیتوان با این روش انجام داد جنراتورهای آسنکرون (asynchronous generators) است.

نصب سایتون (Cython)

نصب سایتون ساده است. با دستور pip به راحتی می توانید آن را نصب کنید.

pip install cython

یا برای پایتون ۳ با این دستور:

pip3 install cython

افزودن فایل compile.py

اسکریپت زیر را به پوشه پروژه خود (به نام compile.py) اضافه کنید. این اسکریپت به عنوان یک makefile برای عملیات build عمل می کند.

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
)

باید پرونده هایی که می خواهید کامپایل کنید را در اسکرپیت وارد کنید. همچنین می توانید فایل هایی که نیاز به کامپایل ندارند را وارد نکنید و بدون کامپایل رها کنید.

افزودن فایل main.py

برای اپلیکیشن خود یک فایل پایتون به عنوان نقطه ورود (entry point) بسازید. شما تمام منطق کامپایل شده را از اینجا import و اجرا می کنید.

ایجاد فایل entry point ضروری است، زیرا Cython به صورت پیشفرض فایل های اجرایی باینری تولید نمی کند. (البته این قابلیت را دارد)، بنابراین شما نیاز به یک فایل پایتون ساختگی دارید که در آن به راحتی تمام منطق کامپایل شده را وارد کرده و آن را اجرا می کنید. این کد می تواند به همین سادگی باشد:

from logic import main      # this comes from a compiled binary
main ()

اجرای compile.py

بسته به نسخه پایتون می توانید این دستور را اجرا نمایید:

python compile.py build_ext --inplace

برای پایتون ۳:

python3 compile.py build_ext --inplace

دستور بالا فایل های .so و .c را در کنار فایل های .py ایجاد می کند. شبیه عکس زیر:

cython compile

فایل های .c سورس های حد واسطی هستند که برای ایجاد فایل های .so استفاده می شوند. فایل های .so ماژول های باینری هستند که میخواهید آنها را توزیع کنید. هنگام ساخت این فایل ها روی ویندوز احتمال دارد با پسوند dll باشند. (احتمالا در صورتی که اکستنشن pyd روی سیستم شما نصب باشد این اتفاق می افتد)

شما می توانید فایل .c و .py را حذف کنید و فقط فایل .so را نگهدارید.

توجه داشته باشید که فایل های .so شامل نام پلتفرم هدف در نام خود هستند (برای مثال در عکس بالا نام darwin برای MacOS). بنابراین بدیهی است که ماژول های کامپایل شده چندسکویی نباشند. اگر شما قصد توزیع برنامه خود در لینوکس را دارید باید آن را در لینوکس کامپایل کنید، در غیر این صورت قادر به بارگذاری این باینری ها نخواهید بود. بنابراین شما باید برای هر پلتفرم نسخه مخصوص آن را کامپایل کنید.

خوشبختانه ابزارهایی مانند  Vagrant وجود دارد که می تواند به کاهش نیاز به نصب چندین سیستم عامل فقط با چند دستور ساده کمک کند.

تنظیم محیط سیستم عامل مختلف با استفاده از VirtualBox و Vagrant

در اینجا یک مثال از نحوه مدیریت کامپایل پروژه من روی اوبونتو ۱۶٫۰۴ در حالی که از مک استفاده می کنم را ببینید.

  1. نرم افزار VirtualBox و Vagrant را نصب کنید.
  2. دستور export VAGRANT_DEFAULT_PROVIDER=virtualbox را اجرا کنید. (شما می توانید برای راحتی این دستور را در Bash startup script در مسیر ~/.bash_profile قرار دهید.)
  3. سیستم عامل خود را از این صفحه انتخاب کنید. سپس از بخش “How to use” روی تب new کلیک کنید. شما دستورالعمل های نصب و دستورات را در آنجا پیدا خواهید کرد. این دستورات را در دایرکتوری پروژه خود اجرا کنید. (همانند عکس زیر)

cython-vagrant

در نهایت با اجرای vagrant ssh می توانید به یک کنسول نصب شده اوبونتو بروید. (برای خروج دستور exit را تایپ کنید)

cython-ubuntu

برای مشاهده فایل های پروژه با دستور cd به مسیر دایرکتوری /vagrant رفته، سپس مراحل گفته شده در ابتدای مقاله را انجام دهید.

cython-compile-linux

برای پروژه هایی با چرخه build/release کوتاه، ساخت چندسکویی می تواند با استفاده از سرویس CI (مخفف Continuous Integration) مانند TravisCI به صورت اتوماتیک باشد.

 

نکته: این مقاله با کمی تغییر در متن اصلی توسط تیم گیت دات آی آر ترجمه گردیده است. نظرات خودتون رو درباره این مقاله بیان کنید. متن اصلی مقاله را می توانید در این صفحه مطالعه نمایید.

به این نوشته امتیاز دهید ۱ ۲ ۳ ۴ ۵ (۱ رای)

پیشنهاد فرادرس

پیشنهاد فرادرس


لينک منبع

درباره ی admin

همچنین ببینید

آموزش آپاچی اسپارک در ۷ روز – گیت

اگر به دنبال راهی هستید تا در مدت زمان کوتاهی مفاهیم اصلی Apache Spark را …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *