دپلوی کردن و استفاده از مدل در عمل (Model deployment)

10نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

پس از اینکه یک مدل را آموزش دادیم، می‌خواهیم یک سرور سبک و کوچک داشته باشیم تا بتوانیم با فرستادن عکس نتیجه پیش‌بینی (Predict) مدل را دریافت کنیم، درواقع کاری می‌کنیم که امکان پیش‌بینی از هرجایی از طریق اینترنت فراهم باشد. اینکار کمک می‌کند بتوانیم سرویس‌ها و حتی اپلیکیشن‌‌هایی برای استفاده عملی از مدل خود داشته باشیم.

برای اینکار چندین راه وجود دارد؛ در این پست ما روش‌‌های اجرای لوکال، دپلوی با Heroku و اجرا از سرور ریموت را بررسی می‌کنیم.

 

اجرای لوکال


اگر در فکرید که اجرای لوکال به دسترسی از طریق اینترنت چه ربطی دارد، اجازه بدید ابزار مورد نیاز این روش را معرفی کنیم:

ابزار‌ها

ngrok – ابزاری رایگان برای ایجاد تونل از اینترنت به یک پورت در سیستم لوکال است. ngrok یک آدرس قابل دسترس از اینترنت به پورت مشخص شده می‌دهد تا بتوان ترافیک پورت را از خارج سیستم از طریق اینترنت دریافت کرد.

Flask – فلسک یک میکروفریم‌ورک سبک برای راه‌اندازی سریع و راحت وب‌سرور است. آموزش مقدماتی فلسک را بخوانید.

قبل از شروع، طبق این مراحل ngrok را نصب کرده و آن‌را به PATH سیستم خود اضافه کنید.

طبق آموزش مقدماتی فلسک، کدی مانند نمونه کد زیر برای سروری که قادر به گرفتن عکس (upload)، لود مدل آموزش داده‌شده (Load model)، پیش‌بینی عکس (Predict)‌ و برگرداندن خروجی است، بنویسید.

سپس، سرور فلسک را با وارد کردن دستور زیر در ترمینال اجرا کنید:

پس از اجرا، سرور در آدرس http://localhost:5000 در دسترس می‌شود.

حال با استفاده از ngrok به این سرور یک آدرس قابل دسترس در اینترنت اختصاص می‌دهیم؛ برای اینکار یک ترمینال جدید باز کرده و دستور زیر را وارد می‌کنیم:

در این دستور با فراخوانی ngrok گفته ایم به برنامه درحال اجرا در پورت ۵۰۰۰ میخواهیم دسترسی از طریق پروتکل http بدهیم. پس از اجرای دستور بالا مطابق شکل زیر آدرسی که می‌توان برای دسترسی به سرور استفاده کرد به همراه آدرس مدیریت سرویس ngrok به نمایش در‌می‌آید:

ngrok output

پس از آن می‌توانید از طریق این آدرس و endpoint های تعریف شده از مدل خود استفاده کنید.

 

دپلوی با Heroku


شاید سخت‌ترین روش بین دو روش دیگر این روش و استفاده از Heroku است و مفاهیمی که این روش به عنوان پیش‌نیاز لازم دارد تا آشنا باشید کم نیستند. اما شاید از روش‌های دیگر سخت‌تر باشد اما می‌تواند جذاب‌تر و حتی پرکاربرد تر باشد. همچنین لازم به ذکر است این سرویس فعلا برای استفاده مسدود بوده و نیاز به اتصال غیر مستقیم است و در استفاده رایگان حجم پروژه نباید از ۵۰۰ مگابایت بیشتر باشد.

ابزار‌ها

Heroku – سرویس (PaaS (Platform as a service ای و درواقع بستری به عنوان سرویس ابری است که از زبان‌های برنامه نویسی زیادی پشتیبانی می‌کند که برنامه نویس را از کارهای DevOps لازم برای راه‌اندازی یک سرور بی‌نیاز می‌کند.

Flask – فلسک یک میکروفریم‌ورک سبک برای راه‌اندازی سریع و راحت وب‌سرور است. آموزش مقدماتی فلسک را بخوانید.

Github – گیت‌هاب سرویس میزبانی و کنترل نسخه تحت وب قدرت گرفته از گیت (git) است.

GitLFS – سیستم مدیریت فایل‌های حجیم گیت.

GitLFS سرویس ارائه شده توسط GitHub برای کنترل نسخه فایل‌های حجیم (حجیم تر از ۵۰ مگابایت) است و چون ما در پروژه خود فایل‌های نظیر فایل مدل آموزش داده شده و شاید فایل‌های دیگر داشته باشیم به این برنامه احتیاج داریم.

در ادامه مطابق آموزش شروع استفاده از Heroku با زبان پایتون، دلپوی برنامه خود (سرور پیش‌بینی) را، با استفاده از خط فرمان -و با شروع از سیستم خود- بررسی می‌کنیم؛ اما، این مراحل از طریق داشبورد Heroku که پس از ساخت اکانت در هروکو به آن دسترسی دارید نیز قابل انجام است. خوب است برای برنامه خود یک محیط مجازی پایتون ایجاد کرده، پیش‌نیاز‌های آن را نصب کرده از اجرای لوکال آن مطمئن شده و سپس اقدام به دپلوی آن کنید.برای آشنایی بیشتر آموزش ایجاد محیط مجازی پایتون و آموزش ایجاد سرور فلسک را بخوانید.

ورود

قبل از هر چیز یک اکانت رایگان در Heroku بسازید. اگر پایتون را به صورت لوکال نصب ندارید از اینجا دریافت کنید. در ادامه رابط خط فرمان Heroku را نصب کنید.

پس از نصب موارد فوق، ترمیتال را باز کرده و با استفاده از دستور زیر در Heroku لاگین می‌کنیم:

پس از اجرای دستور، ایمیل و رمزعبور خود را وارد کرده تا وارد شوید.

آماده‌سازی

اگر برنامه شما توسط git مدیریت نمی‌شود با استفاده از دستور git init  آن‌را فعال کنید. همچنین فایل‌های حجیم خود را مشخص کنید تا GitLFS آن‌ها را مدیریت کند:

در این مثال فایل model.h5  را که فایل مدل ذخیره شده است و حجم بیشتر از ۵۰ مگابایت دارد را با استفاده از GitLFS مدیریت می‌کنیم.

سپس، با استفاده از دستور زیر یک اپلیکیشن در Heroku درست می‌کنید که آماده دریافت سورس و اجرای آن‌ است:

با اجرای این دستور یک git remote  به نام heroku مرتبط با ریپوزیتوری گیت لوکال شما اضافه خواهد شد. همچنین، یک نام تصادفی (در این مثال lit-bastion-5032 ) به این برنامه تخصیص داده می‌شود. همچنین می‌توان با وارد کردن یک نام دلخواه نام مورد نظر خود را به اپلیکیشن اختصاص داد.

هروکو با استفاده از چند فایل تنظیم، تصمیم می‌گیرد برنامه را به چه صورت و با استفاده از چه سرویسی اجرا کند. برای آن‌که مشخص کنیم برنامه چگونه باید اجرا شود به سه کانفیگ فایل runtime.txt و requirements.txt به همراه فایل Procfile نیاز داریم.

runtime.txt

این فایل شامل توضیحاتی در مورد محیط اجرای برنامه و درواقع زبان مورد استفاده است.

ما این فایل را با محتوی زیر ایجاد می‌کنیم:

requirements.txt

این فایل، پیش‌نیازهای اجرای برنامه را مشخص می‌کند.

ما این فایل را با خروجی دستور pip freeze  که پکیج‌های نصب شده برای پروژه را چاپ می‌کند به صورت زیر ایجاد می‌کنیم:

Procfile

این فایل، شامل توضیحات نحوه اجرای برنامه است.

ما ابن فایل را با دستور زیر ایجاد خواهیم کرد:

این دستور بیان می‌کند که برنامه ما یک برنامه از نوع web بوده و لازم است با استفاده از برنامه سرور gunicorn اجرا شود و فایل اجرایی اپلیکیشنی به نام server است.

دلیل استفاده از سرور gunicorn بجای سرور پیش‌فرض پایتون این است که هروکو از این سرور برای اجرا، بخصوص برای اجرای فلسک استفاده می‌کند.

نکته مهم استفاده از gunicorn این است که این برنامه ابتدا یک سرور اجرا کرده سپس برنامه ما را در آن import می‌کند. از آنجایی که برنامه ما خود سرو خواهد شد نیازی به دستور ()app.run  نخواهد بود و اگر در کد خود از این دستور استفاده کرده ایم باید آن را مانند مثال زیر در شرط بررسی import شدن یا نشدن ماژول قرار دهیم:

با اعمال تغییرات فوق و اضافه کردن کانیفگ فایل‌ها، این تغییرات را با استفاده از گیت کنترل می‌کنیم:

قبل از ادامه دپلوی با استفاده از دستور heroku local web  می‌توانیم سرور خود را به صورت لوکال تست کنیم، اما از آنجایی که برنامه gunicorn در ویندوز قابل اجرا نیست اگر از ویندوز استفاده می‌کنید این امکان وجود نخواهد داشت.

حال اگر برنامه ما نیاز به تغییر نداشته و آماده push  کردن هستیم، با دستور زیر برنامه را در ریپوزیتوری ریموتی که هروکو در اختیارمان گذاشته بود push  می‌کنیم:

readme_assets/images/heroku-git-push.gif

اگر همه چیز موفقیت آمیز باشد، برنامه ما دپلوی شده و آماده استفاده است. قبل از آن با استفاده از دستور زیر مطمئن می‌شویم که حداقل یک نمونه از این برنامه درحال اجرا باشد:

با استفاده از دستور زیر می‌توانیم آدرس اختصاص داده شده به برنامه را در مرورگر باز کنیم:

برنامه آماده استفاده است!

روش بهتر استفاده از هروکو این است که ابتدا فایل‌های پروژه را در گیت‌هاب قرار دهیم. حتی می‌توان یک branch به پروژه آماده شده برای دپلوی روی هروکو اختصاص داد. سپس از طریق داشبور هروکو مستقیما به گیت‌هاب وصل شده و پروژه را دپلوی کرد.

heroku deploy options

اجرا از سرور ریموت


مراحل این روش تا حدود زیادی شبیه روش اول است، چراکه باز نیز با استفاده از flask یک برنامه سرور اجرا می‌کنیم. برای این روش لازم است از یکی از سرویس‌های ارائه دهنده سرور‌های ابری (Cloud servers) و یا سرور‌های اختصاصی (VPS)، سروری تهیه کنید. پس از تهیه سرور IP ای برای دسترسی به سرور به شما داده می‌شود. با استفاده از این سرور و از آنجایی که این IP یک IP عمومی (Public IP)‌ است، تنها کافی است با استفاده از فلسک سروری در سیستم اجرا کرده و host آن را برابر ‘0.0.0.0’ قرار دهیم تا از طریق اینترنت قابل دسترس باشد.

ابزار‌ها

Flask – فلسک یک میکروفریم‌ورک سبک برای راه‌اندازی سریع و راحت وب‌سرور است. آموزش مقدماتی فلسک را بخوانید.

SSH – پروتکل شبکه‌ای برای اتصال امن که یکی از کاربرد‌های آن ورود به یک سیستم ریموت است.

برای اتصال به سرور از SSH استفاده می‌کنیم. برای همین اگر از ویندوز استفاده می‌کنید از نرم‌افزار PuTTY استفاده کرده و اگر از لینوکس استفاده می‌کنید و یا در سیستم ویندوز خود کرنل لینوکس را فعال کرده‌اید (WSL) -از طریق کرنل لینوکس موجود در سیستم- به آی‌پی سرور از طریق SSH متصل شوید.

سپس، پیش‌نیاز‌های لازم برای اجرای اسکریپت‌های پایتون را نصب کرده و فایل‌های لازم برای اجرای مدل شامل، کد اجرای سرور فلسک، فایل مدل و دیگر فایل‌های مورد نیاز را به سرور انتقال دهید (از طریق راه‌اندازی گیت سرور روی سرور و یا آپلود کردن فایل‌ها و دانلود آن‌ها روی سرور).

پس از آن تنها کار لازم اجرای اسکریپت سرور فلسک است. توجه کنیم که برای اجرای سرور فلسک host آن‌را برابر ‘0.0.0.0’ و پورت دلخواه (پیش فرض ۵۰۰۰) تنظیم می‌کنیم:

برنامه در آدرس سرور و پورت تعیین شده اجرا شده و از طریق endpointها در دسترس خواهد بود.

 

منابع

مقاله‌های «پلوی کردن مدل کراس» و «دپلوی مدل‌های کراس» در مدیوم

رپوزیتوری گیت «مثال دپلوی اپلیکیشن پایتون در هروکو»، tl;dr

آموزش مقدماتی فلسک (Flask)

Flask, web development one drop at a time

نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

مقدمه و آشنایی

فلسک یک فریم‌ورک وب مبتنی بر پایتون است برای ایجاد سریع و ساده وب‌سرور که توسط آرمین‌روناچر توسعه داده‌شده است. تلاش برای ساده‌نگه داشتن طراحی فلسک و کوچکی فریم‌ورک و قائل نشدن بسیاری از پیش‌فرض ها برای برنامه‌نویسان دلیلی‌است که این بسته‌نرم افزار را یک میکروفریم‌ورک می‌نامند. فلسک رایگان و متن‌باز بوده و  با مجوز آزاد BSD منتشر شده است.

کار با فلسک به قدری ساده است که اگر کمی با زبان پایتون آشنا باشید با دیدن اولین کدهای فلسک با ساختار این فریم‌ورک آشنا می‌شوید. فریم‌ورک فلسک با همه‌ی سادگی خود بسیار قدرتمند و کاراست و به هیچ عنوان کوچک بودن فریم‌ورک را نمی‌توان با ضعیف بودن آن برابر دانست و امکانات فریم‌ورک‌هایی مثل جنگو و ریلز را با اندکی جستوجو به دست می‌دهد. برای مثال از سرویس‌های بزرگی که از فلسک استفاده می‌کنند می‌توان از Pinterest و Linkedin نام برد که به مناسب بودن فلسک برای توسعه‌ی سرویس‌های اینترنتی اشاره دارد.

دو کتابخانه‌ی اساسی پایه‌‌های قدرتمند فلسک را ساخته‌اند؛ به عنوان واسط وب‌سرور ( WSGI ) از کتابخانه‌ی werkzeug و برای تمپلیت‌انجین از Jinja2 استفاده کرده اند که هردو کتابخانه توسط تیم توسعه ی فلسک توسعه یافته شده است.

بطور پیش‌فرض برای کار با دیتابیس‌ها، اعتبارسنجی فرم ها و کاربران و از این دست کارها ابزار مشخصی در فلسک تعریف نشده است و می‌توان از ابزار‌های شخص ثالث (Third party applications) که برای آن توسعه داده شده‌اند استفاده کرد.

نصب

آماده کردن محیط مجازی

برای نصب و راه‌انداری پروژه‌ها معقول‌ است یک محیط‌ مجازی توسعه ساخت تا در حین کار و حتی یادگیری، مفسر عمومی و پکیج‌های عمومی سیستم دچار تغییر و کانفلیکت نشوند. محیط‌های توسعه‌مجازی یک کپی از مفسر پایتون را بصورت خصوصی در دایرکتوری پروژه شما ایجاد می‌کنند و بعد از فعال کردن این مفسر پکیج‌ها هم بصورت خصوصی در دایرکتوری پروژه نصب می‌شوند.

نحوه ایجاد و فعال‌سازی محیط مجازی را از اینجا بخوانید.

نصب فلسک

حالا نوبت نصب بسته ی فلسک است. متداول ترین روش نصب بسته‌های پایتون استفاده از مدیر بسته‌ی pip است که با استفاده از آن فلسک با دستور زیر نصب می‌شود :

برای بررسی صحت نصب فلسک مفسر پایتون را بصورت تعاملی در ترمینال باز کنید ( تنها دستور python را نوشته و  اینتر کنید ) و بسته‌ی فلسک را با دستور زیر فراخوانی کنید :

اگر خطایی رخ نداد فلسک درست نصب شده است و می‌توانید با اجرای دستور زیر نسخه نصب شده را بررسی کنید:

ساختار برنامه‌ها در فلسک

فلسک هیچ محدودیتی درمورد ساختاربندی فایل‌های پروژه برای شما ایجاد نمی‌کند و می‌توانید ساختار خودتان را داشته باشید یا از رول‌های متداول جامعه ی فلسک استفاده کنید.

ساخت برنامه های فلسک

شروع سریع

کدهای یک اپلیکیشن ساده‌ی فلسک که عبارت  Hello World  را در یک صفحه ی وب نمایان می‌کند بصورت زیر است :

این برنامه از چند بخش تشکیل شده است : فراخوانی و تعریف فلسک ، تعریف مسیرها، اجرای فلسک.

فراخوانی و تعریف فلسک

برای ساخت برنامه‌های فلسک نیاز است ابتدا فلسک را در فایل پایتون خود لود کنید و سپس یک نمونه (instance) از Flask بسازید یعنی این بخش :

تنها آرگومان مورد نیاز برای کانستراکتور فلسک نام ماژول یا پکیج main است که برای بیشتر برنامه ها __name__ در پایتون مقدار درستی است.

می‌توانیم بجای نام اینستنس فلسک ( در مثال بالا app ) هر نام متغیر معتبری استفاده کنیم.

فلسک روی pip یک بسته از ماژول‌های مرتبط به هم است و نه یک ماژول و به همین دلیل هر ماژول باید از درون بسته ی flask جداگانه ایمپورت بشود.

تعریف مسیرها

مسیرها همان آدرس‌های (url های) مختلفی هستند که عملیات‌های متفاوتی بر اساس آن‌‌ها انجام می‌شود. مثلا  site.domain  مسیر ریشه و  site.domain/subdomain  یک مسیر دیگر در همان سایت تعریف می‌کند. در کد مثال ما مسیر بصورت زیر تعریف شده بود :

در اینجا یک دکوریتور نوع ()route  از app (که در قسمت قبل ساختیم) برای تابع Hello world  تعریف می‌کند و آدرس مسیر ('/') را به آن می‌فرستد. مسیرها در فلسک اساس ساخت برنامه‌ها هستند. با استفاده از مسیر‌ها می‌توانید به سادگی بخش‌های مختلف وب‌اپلیکیشن خود را بسازید و مدیریت کنید.

اجرای فلسک

در آخر به پایتون می‌گوییم که فلسک را روی یک وب‌سرور اجرا کند که دستورات آن بصورت زیر است :

این شرط برای بررسی این موضوع است که آیا این فایل پایتون مستقیما اجرا می‌شود (برقراری شرط) و یا به عنوان یک ماژول در یک برنامه دیگر وارد شده است (عدم برقراری شرط).

این کد را در یک فایل مانند app.py ذخیره کرده و در خط فرمان با دستور  python app.py  اجرا کنید. خروجی روی ترمینال چیزی شبیه این است :

که آدرس 127.0.0.1:5000  را که در خروجی مشخص شده است اگر در مرورگر خود امتحان کنید روی صفحه عبارت Hello World  نمایان می‌شود. فلسک به صورت پیش‌فرض پورت ۵۰۰۰ را برای اجرا در نظر می‌گیرد.

تابع run می‌تواند پارامتر‌ ای با عنوان host  داشته باشد که مشخص می‌کند سرور برروی چه آدرسی اجرا شود، همچنین توسط پارامتر  port  می‌توان پورتی که سرور روی آن اجرا شود را مشخص کرد و توسط پارامتر  debug و دادن مقدار true  به آن می‌توان مشخص کرد که لاگ‌ها و گزارشات مربوط به اشکال یابی برنامه نیز چاپ شوند.

برای اینکه سرور از طریق کامپیوتر‌های متصل به همین شبکه قابل مشاهده و استفاده باشد به پارامتر  host  مقدار 0.0.0.0  را می‌دهیم.

توجه کنید که پارامتر host از جنس string، پارامتر port از جنس integer و پارامتر debug از جنس boolean است.

برنامه‌های کاربردی‌تر

استفاده از متغیرها در آدرس

در تعریف قوانین آدرس‌دهی می‌توان به آدرس‌ها با استفاده از عملگرهای <>  متغیر اضافه کرد مانند  <variable_name>  تا بخشی از آدرس به صورت متغیر توسط تابع در دسترس باشد.همچنین می‌توان نوع متغیر را با استفاده از یک مبدل مانند  <converter:variable_name>  مشخص کرد:

نوع پیش‌فرص برای متغیرها string  است.

آدرس‌های منحصر به فرد و هدایت آدرس

به نحوه آدرس دهی در برنامه زیر دقت کنید:

آدرس تعریف شده برای  projects  شبیه آدرس دایرکتوی است و در انتهای خود یک ‘/’ دارد. اگر به این آدرس بدون ‘/’ برویم فلسک ما را به آدرس اصلی (آدرس با ‘/’) هدایت می‌کند.

آدرس تعریف شده برای  about  شبیه آدرس فایل است و در انتهای خود ‘/’ ندارد.  اگر به این آدرس با ‘/’ برویم با خطای ۴۰۴ (صفحه‌ای یافت نشد) مواجه خواهیم شد. این امر این امکان را می‌دهد تا آدرس‌های تعریف شده به این سبک منحصر به فرد بوده و کمک می‌کند موتورهای جستوجو یک صفحه را دوبار ایندکس نکنند.

متدهای HTTP

برنامه‌ها هنگام دسترسی به آدرس‌ها از متد‌های HTTP مختلفی استفاده می‌کنند. به صورت پیش‌فرض یک آدرس تنها به متد GET  پاسخ می‌دهد، اما با استفاده از مشخص کردن متدهای لازم در پارامتر methods  از دکوریتور ()route  می‌توان به متدهای مختلف پاسخ داد:

در کد با بررسی نوع (method) درخواست (request) عملیات متفاوتی انجام می‌شود. این بدین معنی است که اگر به یک آدرس با متد GET درخواست بدیم یک پاسخ و اگر به همان صفحه با متد دیگری مانند POST درخواست بدیم پاسخ دیگری دریافت خواهیم کرد.

استفاده از قالب‌ها (templates)

می‌توان مشخص کرد با مراجعه به صفحه‌ای یک فایل HTML رندر شده و به نمایش درآید. برای اینکار فلسک از فولدربندی خاصی استفاده می‌کند. در فولدر پروژه باید دو فولدر به نام های static و templates ایجاد کنید که در فولدر templates فایل های html و در فولدر static فایل های css و js خودتون رو قرار بدهید.

حال  اگر کاربر به صفحه welcome/ برود فانکشن به جای متن خالی، فایل HTML رو return می‌کند. توجه داشته باشید که این فایل HTML باید داخل پوشه templates قرار گرفته باشد تا فلسک اون رو شناسایی بکند.

استفاده در بخشی از برنامه

از آنجایی که فلسک تنها به عنوان دکوریتور برای توابعی که خود مشحص می‌کنیم قرار می‌گیرد و آن‌‌ها را به آدرس‌های مشخص شده مرتبط می‌کند، می‌توان از آن در یک برنامه در کنار دیگر توابع استفاده کرد و نیازی به جدا سازی فایل مربوط به serve و اجرای برنامه از فایلی که عملیات برنامه در آن پیاده‌سازی شده نیست. به عنوان مثال به فایل زیر توجه کنید:

این برنامه یک برنامه یادگیری ماشین است که عکس ارسالی به endpoint با آدرس predict/  و متد POST  را آپلود کرده و با predict آن نتیجه را برمی‌گرداند. با اجرای کد مدل مربوطه لود شده و سرور شروع به گوش دادن به endpoint ذکر شده برای دریافت درخواست‌ها می‌کند و در صورت دریافت درخواستی حاوی تصویر، توابع مربوطه برای predict عکس را صدا زده و نتیجه را برمی‌گرداند.

افرونه‌ها

فلسک یک فریم‌ورک بسیار توسعه پذیر است و می‌توانید بصورت ماژولار کدهای آن را تقسیم بندی و استفاده کنید. همچنین پلاگین‌های بسیاری هم‌اکنون برای آن نوشته شده است که میتوانید در صفحه‌ی extension های فلسک تعدادی از بهترین افزونه‌های فلسک را بیابید و استفاده کنید.

 

منابع

مقاله «میکروفریم‌ورک فلسک – معرفی» از سایت کدرز

مقاله «آشنایی با میکرو-فریمورک فلسک»‌ از سایت هایو

 

مطالعه بیشتر

سری آموزش «The Flask Mega-Tutorial» از miguelgrinberg

محیط‌های مجازی پایتون (Python virtual environments)

python virtual environments visualization

نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

مقدمه

محیط‌های مجازی (virtual environments) از مهمترین شیوه‌های آزموده شده (Best practice) در توسعه نرم‌افزار تحت پایتون هستند. از آنجایی که با نصب پکیج‌های پایتون، همگی این پکیج‌ها در مسیر‌های مشخصی نصب می‌شوند ممکن است باعث ایجاد مشکلاتی شوند. برای مثال حالتی را در نظر بگیرید که در ایجاد پروژه‌های مختلف به نسخه‌های متفاوتی از برخی کتابخانه‌ها نیاز دارید؛ در این صورت چگونه می‌توانید چندین نسخه‌ متفاوت از یک کتابخانه‌ را در پایتون نصب کنید؟ فرض کنید می‌خواهیم بر روی توسعه دو وب‌سایت؛ یکی توسط نسخه جدید (۱.۸) وب فریم‌ورک جنگو (Django) و دیگری بر روی یک نسخه قدیمی (۰.۹۶) از آن کار کنیم، ولی نمی‌توانیم! چراکه نمی‌شود هر دوی این نسخه‌ها را با هم در پایتون (دایرکتوری site-packages) نصب داشت. یا فرض کنید که برای تست پکیج‌هایی می‌خواهیم بدون نصب آن‌ها در کنار پروژه اصلی، از آن‌ها استفاده کنیم؛ در این وضعیت راه حل ایجاد محیط‌هایی مجازی (Virtual Environments) برای توسعه پروژه‌های مورد نظر است، ابزاری که محیط توسعه و اجرای هر پروژه پایتون را به همراه تمام وابستگی‌های (Dependencies) آن از پروژه‌های دیگر جدا یا ایزوله (AKA. Sandboxing) می‌کند.

در ادامه به بررسی ابزارهای زیر می‌پردازیم:

  • conda
  • virtualenv
  • virtualenvwrapper
  • pyvenv

کوندا (Conda)


یکی از روش‌های مدیریت ورژن‌های پایتون و همچنین ایجاد محیط‌های مجازی پایتون استفاده از کوندا است.

از مزایای conda می‌شود به موارد زیر اشاره کرد:

  • ساختار مشخص و ساده : شناخت ساختار فولدربندی آن بسیار ساده است.
  • مدیریت پنهان فایل‌ها : فایل‌های مربوطه را خارج از فولدر خود نصب نمی‌کند.
  • انعطاف‌پذیری : علاوه بر پکیج‌های زیادی که خود پشتیبانی می‌کند، پکیج‌های pip نیز در محیط‌های ساخته شده توسط کوندا قابل نصب هستند.
  • چندمنظوره: علاوه بر مدیریت محیط‌های مجازی و نسخه‌های پایتون برای زبان‌های دیگر مانند R هم استفاده می‌شود.

نصب

برای نصب Conda از این آموزش استفاده کنید.

ساخت محیط مجازی توسط Conda

برای ساخت محیط مجازی ای با نام myenv و نصب پایتون ۳.۴ و پکیج‌های package1 و package2 با ورژن دلخواه به صورت زیر عمل می‌کنیم:

ورود و خروج به محیط مجازی

برای ورود و فعال سازی محیط مجازی ای با نام myenv به صورت زیر عمل می‌کنیم:

در صورتی که به درستی وارد محیط مجازی شوید، prompt خط فرمان تغییر می‌کند. برای مثال با فعال کردن محیط myenv توسط دستورات بالا به صورت زیر تبدیل می‌شود:

اکنون می‌توانیم در پروژه خود به کتابخانه‌ها، pip، دایرکتوری site-packages و مفسری اختصاصی دسترسی داشته باشیم. همچنین با فعال کردن یک محیط مجازی، فایل‌های اجرایی مربوط به این محیط درون متغیر PATH قرار می‌گیرند تا دستورات مورد استفاده به سادگی در دسترس باشند.

برای خروج و غیر فعال کردن محیط از دستور زیر استفاده می‌کنیم:

برای لیست کردن محیط‌های مجازی از دستور  conda env list و برای لیست کردن پکیج‌ها درون یک محیط از دستورات conda list ویا pip list با توجه به اینکه با کدام روش پکیج‌ها را نصب کرده‌ایم استفاده می‌کنیم.

حذف محیط مجازی

برای حذف محیط مجازی ای که دیگر به آن احتیاج نداریم به صورت زیر عمل می‌کنیم:

برای مطالعه بیشتر در مورد کوندا و کنترل محیط‌های مجازی توسط آن به منابع مربوطه در انتهای پست مراجعه کنید.

از آنجایی که Conda پکیجی چندمنظوره بوده و امکانات و نرم‌افزار‌های زیادی را همراه خود دارد، حجیم بوده و راه‌اندازی آن ممکن است به زمان بیشتری نیاز داشته باشد. روش دیگر ساخت محیط‌های مجازی استفاده از پکیج virtualenv و یا افزونه آن virtualenvwrapper است که در ادامه توضیح داده خواهند شد.

virtualenv


از معروف‌ترین و پراستفاده ترین روش‌های ساخت محیط‌های مجازی برای پایتون استفاده از پکیج virtualenv  است که در ادامه بررسی میکنیم.

نصب

این پکیج به راحتی با استفاده از پیپ (pip) به صورت زیر قابل نصب است:

 

چنانچه بر روی سیستم عاملی هر دو نسخه پایتون 2x یا 3x نصب است؛ این موضوع که virtualenv را توسط pip کدام نسخه نصب نمایید، اهمیت چندانی ندارد. چرا که امکان استفاده از آن برای دیگر نسخه‌ها نیز وجود دارد.

ساخت محیط مجازی توسط virtualenv 

اکنون برای ایجاد یک محیط مجازی از دستور  virtualenv ENV  استفاده می‌شود که منظور از  ENV  در آن، نشانی دایرکتوری دلخواهی است که قصد داریم محیط مجازی در آن ایجاد گردد:

دستور بالا موجب ایجاد یک محیط مجازی در مسیر  /Documents/ENV  سیستم عامل، بر پایه مفسر پایتونی که از pip آن برای نصب virtualenv استفاده کردیم می‌شود و چنانچه بخواهیم محیط مجازی خود را بر پایه‌ نسخه‌ موجود دیگری از پایتون ایجاد نماییم، لازم است با استفاده از فلگ   --python  نشانی مفسر آن مشخص گردد [صفحه راهنما + این پاسخ ]:

در نمونه کد‌ بالا، نسخه‌های۲.۷ و ۳.۴ پایتون از پیش بر روی سیستم عامل نصب بوده و نسخه ۳.۳ و ۲.۵ توسط کاربر در مسیرهای مشخص شده نصب شده است.

ورود و خروج به محیط مجازی

برای ورود و فعال سازی محیط مجازی ای با نام myenv به صورت زیر عمل می‌کنیم:

توچه کنید که با ورود موفق به محیط مجازی prompt خط فرمان چگونه تغییر می‌کند.

اکنون می‌توانیم در پروژه خود به کتابخانه‌ها، pip، دایرکتوری site-packages و مفسری اختصاصی دسترسی داشته باشیم. همچنین با فعال کردن یک محیط مجازی، فایل‌های اجرایی مربوط به این محیط درون متغیر PATH قرار می‌گیرند تا همانند تا دستورات مورد استفاده به سادگی در دسترس باشند.

در لینوکس می‌توانید با اجرای دستورات  which python3 و  which pip3 بررسی کنید که مسیر فایل اجرایی مفسر پایتون و pip از مسیر معمول آن (usr/bin/python3/)‌ متفاوت است.

پس، برای هر پروژه‌ای کافیست داخل پروژه یکبار با فراخوانی virtualenv کارهای لازمه را انجام دهید و پس از آن هرباری که داخل دایرکتوری پروژه مورد نظر می‌شوید آن محیط را فعال کنید.

برای خروج و غیر فعال کردن محیط از دستور زیر استفاده می‌کنیم:

اگر از لینوکس استفاده می‌کنید، با اضافه کردن alias های زیر می‌توان کار ورود و خروج از محیط‌های مجازی را ساده‌تر کرد:

 

virtualenvwrapper


virtualenvwrapper همونطور که از اسمش پیداست یک افزونه و wrapper برای virtualenv است که علاوه بر راحت کردن کار با آن، ایرادات زیر رو هم رفع می‌کند. توجه کنید که virtualenv پیش‌نیاز این پکیج نبوده و لازم به نصب آن نیست:

  • جلوگیری از ساخت دایرکتوری مربوط به مدیریت پایتون و محیط مجازی کنار فایل‌های پروژه (در صورت استفاده از git، باید این فولدر را در gitignore اضافه کنید)
  • لزوم به اعمال فعال سازی و غیر فعال سازی
  • و موارد دیگر

این پکیج برای لینوکس توسعه داده شده است و برای ویندوز یک توزیع از این پکیج با نام virtualenvwrapper-win قابل استفاده است.

نصب

این پکیج به راحتی با استفاده از پیپ (pip) به صورت زیر قابل نصب است:

پکیج virtualenvwrapper برخلاف virtualenv و مانند conda، تمام محیط‌های مجازی را داخل دایرکتوری ای که ما مشخص می‌کنیم ذخیره می‌کند که اینکار باعث جداسازی کد‌ها و پکیج‌های پایتونی ای که نصب می‌کنیم بدون ایجاد ایراداتی که اشاره شد می‌شود.

پیش از ساخت محیط‌های مجازی، اگر از لینوکس استفاده می‌کنید دو دستور پایین را داخل فایل bashrc. (یا zshrc. یا کانفیگ فایل هر شل مورد استفاده) قرار می‌دهیم:

و اگر از ویندوز استفاده می‌کنید متغیری با نام  WORKON_HOME  در Environment Variable ویندوز اضافه کرده و مقدار آن را برابر  USERPROFILE%\Envs%  می‌گذاریم. [آموزش]
با اینکار فولدر virtualenvs. را در لینوکس و فولدر Envs را در ویندوز و در مسیر‌های مشخص شده برای ذخیره سازی محیط‌های مجازی مشخص می‌کنیم.

ساخت محیط مجازی توسط virtualenvwrapper

برای ساخت محیط مجازی ای با نام myenv و ورود به آن از دستور زیر استفاده می‌کنیم:

ورود و خروج به محیط مجازی

برای ورود و فعال سازی محیط مجازی ای با نام myenv به صورت زیر عمل می‌کنیم:

و برای خروج و غیر فعال کردن محیط از دستور زیر استفاده می‌کنیم:

برای لیست کردن محیط‌های مجازی از دستور  lsvirtualenv و یا دستور  workon بدون ورودی استفاده می‌کنیم.

حذف محیط مجازی

برای حذف محیط مجازی ای که دیگر به آن احتیاج نداریم به صورت زیر عمل می‌کنیم:

یک دستور جالب این پکیج  mktmpenv است که یک محیط مجازی با اسم تصادفی ساخته و آن‌را فعال می‌کند و با غیر فعال کردن آن محیط مجازی را پاک می‌کند که برای تست یک کد یا پکیج به سرعت ایده‌آل است.

pyvenv


در نسخه‌های ۳x پایتون و از ۳.۳ به بعد ماژولی با نام venv برای ایجاد محیط‌های مجازی به کتابخانه استاندارد پایتون افزوده شده است که می‌توان از آن به جای نصب virtualenv استفاده نمود و نیازی به نصب ندارد؛ برای این منظور از دستور  pyvenv  و با الگویی مشابه  pyvenv ENV  استفاده می‌گردد.

ساخت محیط مجازی توسط virtualenvwrapper

برای ساخت محیط مجازی ای با نام myenv و ورود به آن از دستور زیر استفاده می‌کنیم:

ورود و خروج به محیط مجازی

برای ورود و فعال سازی محیط مجازی ای با نام myenv به صورت زیر عمل می‌کنیم:

و برای خروج و غیر فعال کردن محیط از دستور زیر استفاده می‌کنیم:

 

منابع

کوندا (Conda)

مقاله «چرا به محیط‌های پایتون نیاز دارید و چگونه آن‌ها را با کوندا مدیریت کنیم» در مدیوم

مقاله «ساخت محیط‌های مجازی برای پایتون توسط کوندا» از سری مقاله‌های دستورالعمل‌های ۲ دقیقه‌ای برای دانشمندان

virtualenv

فصل «ایجاد محیط مجازی» از کتاب آنلاین پایتون کدرز

مقاله «پایتونیک – معرفی Virtual Environment‌ها قسمت اول» در ویرگول

virtualenvwrapper

مقاله «پایتونیک – معرفی Virtual Environment‌ها قسمت دوم» در ویرگول

مستندات virtualenvwrapper

pyvenv

فصل «ایجاد محیط مجازی» از کتاب آنلاین پایتون کدرز

 

مطالعه بیشتر

این سوال و جواب در stackoverflow

مقاله «رمزبرداری از محیط‌های مجازی»

اتصال مستقیم سرویس کولب (Google Colab) به درایو (Google Drive) از طریق فایل سیستم FUSE

نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

google colab

اگر با گوگل کولب (Google Colab) کار کرده باشید می‌دانید که فایل سیستم آن از فایل سیستم گوگل درایو (Google Drive) جدا بوده و برای استفاده از فایل‌های خود باید پس از اتصال کولب به درایو فایل‌های مورد نیاز را دانلود کرده و پس از اعمال تغییرات برای جلوگیری از پاک شدن فایل‌ها -فایل‌های موجود در کولب پس از ۱۲ ساعت پاک می‌شوند- آن‌ها را در درایو دانلود کنید.

روش دیگر اینکار اتصال گوگل درایو به صورت یک فایل سیستم FUSE به گوگل کولب است، که در واقع گوگل درایو را در کولب mount می‌کنیم. از مزیت‌های آن این است که فایل‌ها در طرفین همگام و یکسان (sync) بوده و برای استفاده از فایل‌ها نیازی به دانلود و آپلود آن‌ها نیست.

روش اتصال

نصب پیش‌نیازها

ابتدا با استفاده از دستورات زیر،‌ پکیج‌های مورد نیاز را دانلود و نصب می‌کنیم:

تائید هویت

سپس، با استفاده از اجرای دستور زیر و باز کردن لینک داده شده، در اکانت خود وارد شده و کد داده شده را در قسمت مربوطه وارد می‌کنیم تا اجازه اتصال گوگل کولب به گوگل درایو را بدهیم:

همچنین، با دستورات زیر همانند مراحل بالا اجازه دسترسی فایل سیستم FUSE را به گوگل درایو می‌دهیم:

اتصال

حال فولدری در فایل سیستم گوگل کولب به نام drive  ساخته و گوگل درایو را در آن mount می‌کنیم:

پس از اجرا لیست فایل‌های دایرکتوری  drive  چاپ می‌شود که درواقع تمامی فایل‌های گوگل درایو شما هستند.

 

منبع

این نوت‌بوک در گوگل کولب

اجرای نوت‌بوک‌ها تحت وب توسط سرویس Azure notebook

سرویس Microsoft Azure Notebooks یک Interactive Notebook یا یک محیط آنلاین برنامه‌نویسی پویا (interactive) قدرت گرفته از Jupyter است که زبان‌های پایتون، R و #F را پشتیبانی‌می‌کند.

مزیت این سرویس نسبت به سرویس‌های مشابه مثل mybinder و یا حتی repl.it ؛ در دسترس بودن برای همه کاربران و از پیش نصب بودن تعداد زیادی از پکیج‌های مورد نیاز برای انواع زمینه‌ها است. همچنین این سرویس یک ترمینال برای مدیریت و کار با فایل‌های نوت‌بوک در اختیار هر کاربر می‌گذارد و هر کاربر ۴ گیگابایت فضای مموری و ۱ گیگابایت فضای ذخیره‌سازی فایل برای هر نوت‌بوک به صورت رایگان در اختیار دارد.

این سرویس امکان ساخت نوت‌بوک و یا کلون‌کردن (کپی‌کردن) یک ریپوزیتوری گیت که دارای نوت‌بوک است و اجرای آن تحت وب را به کاربران می‌دهد. برای اینکار تنها داشتن یک ایمیل در یکی از سرویس‌های مایکروسافت مثل outlook و یا hotmail کافیست.

 

در ادامه موارد زیر را بررسی می‌کنیم:

  • نحوه ورود و اجرای نوت‌بوک‌ها در Azure notebook و ایجاد یا کلون کردن یک نوت‌بوک
  • نصب پکیج‌ها داخل نوت‌بوک‌ها یا توسط ترمینال

 

ورود، ایجاد یا کلون و اجرای نوت‌بوک‌ها

  • پس از ورود -توسط ایمیل مایکروسافتی (outlook یا hotmail)- برای دسترسی به نوت‌بوک‌ها وارد قسمت Libraries (از گزینه‌های بالای صفحه) می‌شویم تا لیست نوت‌بوک‌ها فعلی نمایش داده شود.
  • برای ساخت و یا کلون کردن نوت‌بوک روی گزینه New Library + کلیک می‌کنیم. حال برای کلون کردن ریپازیتوری کلاس در گیت‌هاب وارد تب From GitHub شده و آدرس آن را در فیلد اول و نام دلخواه خود برای نوت‌بوکی که ساخته خواهد شد را در فیلد دوم و آدرس دلخواهمان برای دسترسی به این نوت‌بوک را در فیلد سوم وارد می‌کنیم.
  • پس از پایان عملیات کلون کردن (مدتی طول می‌کشد) وارد کتابخانه کلون شده می‌شویم و نوت‌بوک‌ها با انتخاب آنها در دسترس هستند.
  • اگر سرور اجرای نوت‌بوک‌ها روشن نباشد با انتخاب یکی از نوت‌بوک‌ها روشن شده و پس از مدتی نوت‌بوک اجرا شده و همانند یک ژوپیتر نوت‌بوک که در کامپیوتر اجرا می‌کردیم، تحت وب قابل استفاده است.
  • با باز کردن نوت‌بوک پنجره‌ای برای انتخاب کرنل مورد نیاز برای این نوت‌بوک باز خواهد شد. البته کرنل را می‌توان بعدا از طریق تب Kernel داخل خود نوت‌بوک هم تغییر داد.
  • در ویدئو برای تست نوت‌بوک و کرنل آن سه کتابخانه openCV، Tensorflow و Keras در نوت‌بوک import شده و ورژن آنها بررسی و چاپ شد.
کلون‌کردن نوت‌بوک‌ها از طریق کلیک روی دکمه launch | azurenb در ابتدای هر نوت‌بوک نیز قابل انجام است.

نصب پکیج

علاوه بر تعداد زیاد پکیج‌های از پیش نصب شده برای هر نوت‌بوک امکان نصب پکیج‌های دلخواه هم از داخل نوت‌بوک و از هم طریق ترمینال وجود دارد.

پکیج‌هایی که نصب می‌شوند تنها در طول مدت روشن بودن سرور نوت‌بوک‌ها فعال هستند و نوت‌بوک‌های غیرفعال پس از ۱ ساعت عدم فعالیت خاموش می‌شوند.

نصب پکیج از داخل نوت‌بوک

  • در داخل نوت‌بوک‌ها با استفاده از اوپراتور «!» در ابتدای خط هر سلول می‌توان دستوری را از داخل نوت‌بوک روی کرنل سیستم‌عامل سرور اجرا کرد و خروجی آن را داخل نوت‌بوک مشاهده کرد. برای امتحان این موضوع دستور cal (کوتاه کلمه calendar) استفاده شد که یک تقویم کوتاه را نمایش می‌دهد.
  • همانطور که دستور cal که یک دستور محیط ترمینال ([terminal [bash) است داخل نوت‌بوک قابل دسترسی است؛ دستورات pip یا conda که برای نصب پکیج‌ها استفاده می‌کنیم هم در دسترس هستند.
  • برای امتحان در دسترس بودن این دو دستور لیست پکیج‌های نصب شده توسط هر دو برنامه با دستورهای pip list و conda list چاپ شد.
  • همچنین برای مثال نصب پکیج، پکیج cowsay از داخل خود نوت‌بوک نصب و بلافاصله قابل import کردن و استفاده شد.

نوت‌بوک توضیحات

نکته مهم در حذف پکیج از داخل نوت‌بوک

از آنجایی که از داخل نوت‌بوک‌ها امکان دادن ورودی (input) به برنامه در حال اجرا روی ترمینال (مثلا هنگام نصب پکیج توسط pip) وجود ندارد و اگر برای حذف یک پکیج نیاز به تایید یا ورود هر نوع اطلاعاتی از سمت کاربر باشد عملیات به صورت کامل انجام نمی‌شود باید از فلگ (flag) یا تنظیم q- به همراه دستور pip استفاده کرد.

نصب پکیج توسط ترمینال

  • هر نوت‌بوک به صورت مجزا ۴ گیگ رم و ۱ گیگ فضای ذخیره‌سازی در اختیار دارد. به علاوه می‌توان به صورت مستقیم از طریق ترمینال به مدیریت و کنترل محیط اختصاصی (Environment / container) نوت‌بوک بر روی سرور پرداخت.
  • ترمینال از طریق دکمه Terminal در صفحه کتابخانه نوت‌بوک‌ها در دسترس است.
  • برای تست ترمینال مشخصات سرور چاپ شد.
  • بر اساس کرنل انتخاب شده برای نوت‌بوک، کرنل پایتون در مسیر جداگانه‌ای مطابق زیر قرار دارد:
    • کرنل python 2.7 :
      مسیر anaconda2_501/~
    • کرنل python 3.5 :
      مسیر anaconda3_420/~
    • کرنل python 3.6 :
      مسیر anaconda3_501/~
  • باید به این نکته توجه کرد که پایتون داخل نوت‌بوک با پایتونی که داخل ترمینال نصب است متفاوت است و در نتیجه برنامه‌های آنها مخصوصا pip و conda که ما نیازشان داریم هم متفاوت هستند؛ چراکه پایتون محیط ترمینال آن پایتونی است که روی سرور نصب است اما پایتونی که به عنوان کرنل نوت‌بوک استفاده می‌شود در مسیری همانند آنچه بالا گفته شد قرار دارد.
  • برای بررسی نکته بالا با استفاده از دستور which و اجرای which pip مسیر برنامه pip درون نوت‌بوک و درون ترمینال چاپ شد که مشاهده می‌شود درون نوت‌بوک pip از درون دایرکتوریanaconda3_501 و درون ترمینال از دایرکتوری دیگری اجرا می‌شوند.
  • برای دسترسی به برنامه pip یا conda ای که پکیج‌های نوت‌بوک را مدیریت می‌کند می‌توان به دو صورت عمل کرد:
    • اجرای مستقیم این برنامه‌ها از مسیر نصبشون به این صورت که بجای دستور pip یا conda می‌نویسیم : [anaconda3_501/bin/[pip or conda/~
    • همچنین می‌توان آدرس این برنامه‌ها را به متغیر (Environment Variable) ای به نام PATH اضافه کنیم تا به راحتی و تنها با نوشتن pip  یا conda در دسترس باشند. برای اینکار با وارد کردن دستور export PATH=~/anaconda3_501/bin:$PATH مسیر برنامه‌های نصب شده پایتون درون فولدر anaconda3_501 (این فولدر باید بر اساس کرنل انتخاب شده برای نوت‌بوک انتخاب شود) به متغیر PATH اضافه شده و برنامه‌های pip و conda (و دیگر برنامه‌ها را) تنها با اسمشان قابل اجرا می‌کند.
  • در ادامه برای استفاده آتی ابتدا یک جمله از شکسپیر درون فایلی نوشته شد.
  • سپس در ترمینال برای مثال نصب پکیج توسط ترمینال، پکیج lolcat نصب شد.
  • همچنین با استفاده از lolcat جمله‌ای از شکسپیر که درون فایل ذخیره شده بود چاپ شد.

نوت‌بوک توضیحات

 

آپدیت

با کلون کردن یک ریپازیتوری و اجرای نوت بوک‌های آن، تغییرات روی ریپازیتوری شامل اضافه شدن فایل‌ها، تغییر در آنها و … درون کتابخانه سرویس Azure به صورت خودکار بروز رسانی نمی‌شود. برای اینکار نیاز است تا با استفاده از git خودمان این کتابخانه (که در واقع کلونی از کتابخانه روی GitHub) است را بروز رسانی کنیم.

برای اینکار به این صورت عمل می‌کنیم که ابتدا ترمینال ریپازیتوریمون رو باز می‌کنیم (بالاتر نحوه باز کردنش توضیح داده شده) و سپس با دستور زیر به پوشه library که پوشه‌ای است که فایل‌های کلون شده از گیت‌هاب قرار داده شده اند میرویم:

→ cd library

در ادامه مطابق تصویر با دستور زیر بررسی می‌کنیم آیا تغییری در فایل‌های نوت بوک داده‌شده است یا خیر:

 git status →

همونطور که مشاهده می‌کنید تغییراتی درون فایل بعضی نوت‌بوک‌ها داده شده است که در قسمت Changes not staged for commit ذکر شده‌اند و فایل‌هایی جدید ایجاد شده‌اند که در قسمت Untracked files مشخص شده‌اند. لازم است قبل از بروزرسانی ریپازیتوری این تغییرات (فایل‌هایی که تغییر کرده‌اند) commit شده [در مورد این کار بخوانید] یا فایل‌ها به حالت اول برگردند (تغییرات آنها پاک شود) که اگر تغییرات داده شده روی نوت‌بوک‌ها مهم نیستند بهتر است همینکار را بکنیم. دلیل این‌کار این است که در طی بروز رسانی ریپازیتوری از منبع آن در گیت‌هاب تغییرات داده شده از دست نرفته و حتی بعدا قابل انتقال به دیگر نسخه‌‌های این ریپازیتوری باشند.

در اینجا تغییرات را پاک کرده و فایل نوت‌بوک‌ها را به حالت اول آنها برمی‌گردانیم. برای اینکار مطابق تصویر با دستور زیر تمامی فایل‌های تغییر کرده را به حالت اولشان برمی‌گردانیم:

→ git checkout .

در دستور بالا به دات (. یا نقطه) در انتهای دستور دقت کنید. این نقطه به معنی اعمال checkout -در نظر نگرفتن تغییرات- به همه فایل‌های modified (فایل‌های تغییر کرده یا همان فایل‌هایی که در تصویر قبلی لیست شده بودند) است.

حال همانطور که از اجرای دوباره دستور git status مشخص است، تغییراتی که در فایل‌ نوت‌بوک‌ها داده بودیم حذف شده اند و نام هیچ فایلی در قسمت Changes not staged for commit ذکر نشده است.

در ادامه برای گرفتن آخرین تغییرات از ریپازیتوری گیت‌هاب و اضافه کردن آنها به ریپازیتوری فعلیمون مطابق تصویر از دستور زیر استفاده می‌کنیم:

→ git pull

پس از اجرای این دستور آخرین تغییرات به زیپازیتوری جاری در Azure اضافه می‌شود. همچنین همانطور که مشاهده می‌کنید لیست نوت‌بوک‌های تغییر کرده به همراه میزان تغییر آن‌ها نمایش داده شده است. حال با بازگشت به قسمت library سرویس نوت‌بوک‌های اضافه شده قابل اجرا هستند.

نصب کتابخانه Keras بر پایه ی کتابخانه TensorFlow

سلام به همگی دوستان، سعی میکنم خیلی کوتاه و مختصر توضیح بدم تا وقت بیهوده برای خوندن مطلب از دست ندید.

اول از همه، برای یادآوری باید بگم که طبق تیتر مطلب، کتابخانه Keras (زین پس کراس) بر پایه ی کتابخانه های مختلفی نوشته شده که به دلیل تازه تر بودن، قوی تر بودن و همگانی تر شدن کتابخانه TensorFlow (زین پس تنسرفلو) ما قصد نصب برپایه این کتابخانه را داریم.

* برای شروع حتما نسخه 64 بیتی پایتون های 3.6 و یا 3.5 را نصب کنید. (آیا پایتون من 64 بیتی است؟)


نصب مبتنی بر CPU : 

نصب تنسرفلو به کمک Pip :

نصب تنسرفلو  به کمک Conda :

 

* مشکل در نصب : اگر با دستورات فوق موفق به نصب نشدید به این لینک رجوع کنید.

آیا تنسرفلوی من نصب شده است؟ برای اطمینان این کد را اجرا و از نصب درست کتابخانه مطمئن شوید.

نصب ابزار های مورد نیاز :

و در نهایت نصب کراس به کمک Pip :

نصب کراس به کمک Conda :

آیا کراس من نصب شده است؟ برای اطمینان این کد را اجرا و از نصب درست کتابخانه مطمئن شوید.

In :

Out :

 

 


نصب مبتنی بر GPU : 

برای اینکه بتونیم محاسبات رو با کارت گرافیک خودمون انجام بدیم نیاز به کارت گرافیک NVIDIA هست که در ادامه متوجه خواهید شد آیا شما می توانید از این روش استفاده کنید یا خیر!

 

نصب ابزار CUDA (پیش نیاز) :

کودا یک مدل برنامه نویسی و یک پلتفرم برای انجام محاسبات موازی می باشد.

برای شروع با طی کردن این مسیر از مدل کارت گرافیک خود آگاه بشوید :

Windows + R > control /name Microsoft.DeviceManager >  Display Adapters

سپس در این لیست جست و جو کنید، اگر نام سری و شماره پردازنده خود را یافتید شما قادر به استفاده از CUDA هستید!

سپس حتما نسخه 9.0 را دانلود و نصب نمایید و آدرس آن را در %PATH% قرار دهید. (لینک)

* مشکل در نصب : به این لینک مراجعه کنید.

نصب ابزار cuDNN (پیش نیاز) :

حتما نسخه 7.0 را دانلود و نصب نمایید و آدرس آن را در %PATH% قرار دهید. (لینک)

* توجه : حتما نسخه ذکر شده را نصب کنید و از وجود فایل cuDNN64_7.dll مطمئن شوید!

* مشکل در نصب : به این لینک مراجعه کنید.

نصب تنسرفلو به کمک Pip :

نصب تنسرفلو  به کمک Conda :

ما بقی مراحل همانند قسمت نصب با CPU می باشد. لطفا مشکلات و راه حل های خود را در گروه مطرح کنید تا به تکمیل تر شدن این پست کمک کنیم.

به زودی تکمیل می شود ..


محیط مجازی (virtualenv) : 

به طور خلاصه، برای جدا و ایزوله سازی وابستگی های یک پروژه از سایر پروژه ها از این قابلیت استفاده می شود. در ادامه به کمک این امکان، یک ورژن خاص از پایتون را بر روی محیط مجازی خودمون نصب می کنیم. (راه حلی برای نصب تنسرفلو از طریق کوندا بر روی پایتون 3.5 در حین داشتن ورژن 3.6)

* توجه : قبل از این عملیات ها، ورژن پایتون مورد استفاده خود را نصب نمایید.

نصب ابزار virtualenv :

ایجاد محیط جدید :

فعال کردن محیط در لینوکس :

 

فعال کردن محیط در ویندوز :

 

تبریک! حالا شما می تونید پکیج های مورد نظر خودتون رو در محیط ایجاد شده بدون ایجاد هیچگونه اختلالی در محیط های دیگر نصب نمایید.

برای deactive کردن، حذف و سایر اطلاعات مربوطه به این منبع مراجعه کنید.


  محیط مجازی در کوندا (virtualenv) : 

ایجاد محیط جدید :

فعال کردن محیط در لینوکس :

فعال کردن محیط در ویندوز :

حال می توانید پکیج های خود را بر روی محیط جدید نصب کنید.

نصب مستقیم پکیج در هنگام ساخت محیط جدید (راه دوم)

نصب ادیتور مخصوص محیط جدید

حال شما ادیتور لازم در کوندا و برای محیط جدید خودتون رو ایجاد و باز کرده اید

* توجه : در صورت عدم دسترسی cmd را در مود administrator باز کنید.

برای deactive کردن، حذف و سایر اطلاعات مربوطه به این منبع مراجعه کنید.

 


لینک منبع تنسرفلو : https://www.tensorflow.org/install/#pip_installation_on_windows

لینک منبع کراس : https://www.pyimagesearch.com/2016/11/14/installing-keras-with-tensorflow-backend/

 

دریافت از git و به روز کردن فایل‌ها

سورس‌کدهای مربوط به کلاس‌های این ترم در github آپلود میشود. در گیت‌هاب نمی‌توانید نوت‌بوک‌ها را یکی یکی دانلود کنید و هر بار باید کل نوت‌بوکها را بعد از هر بار به روز رسانی دریافت کنید که اینکار مطلوب نخواهد بود.

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


  • نصب نرم افزار git

ابتدا نرم افزار git را برای سیستم عامل خودتان دانلود و نصب کنید.
ابزارهای مختلفی برای اینکار وجود دارد، اگر از ویندوز استفاده می‌کنید میتوانید  از این آدرس دانلود کنید.



در فرآیند نصب میتوانید تمام گزینه های پیش فرض را انتخاب کنید. در عکس بالا و این قسمت از گزینه های نصب، گزینه‌ی use Git from windows command prompt را تیک بزنید.

حالا از این پس می‌توانید در محیط CMD از دستورات git استفاده کنید.

  • دریافت یک repository جدید (دستور clone)
  1. آدرس repository درس را از قسمت سبز سمت راست بالا ی  ( Clone or download) کپی کنید:
    مثلا آدرس برای درس بینایی ماشین آدرس https://github.com/Alireza-Akhavan/class.vision.git خواهد بود.
  2. به مسیری که میخواهید این repository را دریافت کنید بروید و با نگاه داشتن shift و زدن کلیک راست دکمه‌ی Open Command window here را بزنید.
  3. و در cmd ی که برای شما باز شده دستور زیر را وارد کنید:

    برای مثال برای repository مربوط به درس بینایی ماشین خواهیم داشت:

    و مطابق تصویر زیر پوشه حاوی repository گیت‌هاب بر روی سیستم شما کپی می‌شود.

    توصیه میکنم تا زمانی که با دستورات git آشنایی کامل پیدا نکرده اید بر روی این پوشه تغییراتی اعمال نکنید و آن را عینا کپی کرده و نوت‌بوکها را از نسخه‌ی کپی شده اجرا کرده و تغییر دهید.

 

  • به روز نگاه داشتن یک repository (دستور pull)

در طول ترم نوت‌بوکهای قبلی به روز شده و نوت‌بوکهای جدیدی اضافه خواهد شد، بدین منظور نیاز است به داخل پوشه‌ی مربوط به repository دریافت شده بروید (در اینجا class.vision) و با باز کردن cmd در این محل دستور زیر را تایپ کنید.

 

برای مثال خواهیم داشت:

 

موفق و سربلند باشید.

دانلود و نصب آناکوندا برای کار با پایتون

به آدرس https://www.continuum.io/downloads  بروید.

  1. نسخه‌ای که میخواهیم دانلود و نصب کنیم نسخه بالاتر یا برابر با Python 3.5 version است. لطفا ورژن پایین تر دانلود نکنید.
  2. برای دانلود نسخه ی مناسب, باید بدانید ویندوزتان 32 بیتی یا 64 بیتی است. اگر نمیدانید این لینک را مطالعه کنید:
    https://support.microsoft.com/en-us/help/15056/windows-7-32-64-bit-faq
  3. اگر از سیستم عامل ویندوز استفاده نمیکنید, به اینجانب  پیام بدهید و راهنمای نصب سیستم عامل  (Max، Linux) را دریافت کنید.

راهنمای دانلود برای ویندوز:

اگر سیستم عامل 32 بیتی دارید, روی لیک 32 بیتی و اگر 64 بیتی دارید روی لینک مربوطه کلیک کنید. (مطابق تصویر زیر)

راهنمای نصب:

  • روی فایل exe کلیک نمایید
  • مراحل را پیش بروید تا به تصویر زیر برسید؛ مطابق تصویر هر دو گزینه را تیک بزنید

توجه: (خود Anaconda توصیه کرده به علت احتمال تداخل PATH با نسخه های دیگر پایتون روی سیستمتان این گزینه را تیک نزنید. با این حال اگر دفعه اولی است که پایتون را نصب میکنید, برای سادگی توصیه میکنم این گزینه را تیک بزنید.)

– نصب در حود 15 دقیقه طول میکشد؛ در انتها روی دکمه ی finish کلیک نمایید.

 

راهنمای اجرا

راهنمای اجرای spyder :

از منوی start

آیکن مربوط به Anaconda Navigator

روی دکمه ی آبی رنگ (Launch) اجرای spyder کلیک کنید.

در نهایت محیط زیر را مشاهده خواهید کرد:

در سمت راست (2) کنسول و در سمت چپ (1) محیط کد نویسی را مشاهده میکنید که در کلاس تشریح شد.

 

راهنمای اجرای نوت‌بوکهای jupyter:

پوشه‌ی حاوی فایلهای .ipynb را که از گیت‌هاب درس دانلود کرده اید به مسیر دلخواه کپی کنید.

به این مسیر رفته و shift + کلیک راست کنید.

گزینه‌ی Open command window here را کلیک کنید.

در پنجره‌ی باز شده دستور jupyter notebook را تایپ کنید.

حال باید مرورگر شما باز شده و نوت‌بوکهای شما نشان داده شوند.

Installing OpenCV on a MAC

STEP 1 – Install Xcode

  1. Go to – https://developer.apple.com/xcode/
  2. Follow the installation instructions there, should be pretty straight forward to do.

STEP 2 – Install Homebrew

1.        Open the Terminal, by going to: Applications → Utilities → Terminal

2.       Type the following lines. Note do not type the red numbers, they are

simply line

3. Homebrew has now been successfully installed. We can run an update by doing:

brew install python 

STEP 3 – Install the Anaconda Python Package

1.       Go to: https://www.continuum.io/downloads

2.       Select the OSX installer (choose Python 3.5)

3.       Follow the Installation instructions, should be pretty standard, however Continuum has a guide here: https://docs.continuum.io/anaconda/install

4.       Anaconda which includes Python and lots of useful libraries is now installed.

STEP 4 – Install OpenCV 3.0.0

1. Go to terminal window and type the following:

2. Type the following lines:

3. That’s it, OpenCV 3.0.0 would have been successfully installed.

STEP 5 – Launch an Ipython Notebook and test.

1.       Go to terminal window and type the following: jupyter notebook

2.       Open a new ipython notebook. By clicking new located near the top right of the screen (see red 1 below) and then under Notebooks, click on Python 2 (see red 2 below).

3.       When out notebook file loads, type the 3 following lines of code as shown in the image below.

4. If successful, you should see the statement “Packages successfully imported” .

UPDATE:

If the above methods fail which has been happening to a lot of students due to changes in OpenCV, Anaconda etc. Please try the following alternative methods:

  1. From terminal type and run the following.

conda install -c https://conda.binstar.org/menpo opencv

مطالب مرتبط:

Install OpenCV 3 on macOS with Homebrew (the easy way)

Guide to troubleshooting Issues with Mac installs:

Resolving macOS, OpenCV, and Homebrew install errors