وب سایت کانال https://codecrafters.ir
لیست هشتکها در کانال رو در زیر براتون خواهم گذاشت و آپدیت خواهد شد
#design_patterns الگوهای طراحی
#postgresql پستگرس
#k8s کوبرنتیز
#agile اجایل
#scrum
#algorithm الگوریتم
#video
#meeting متینگ
#principles اصول کدنویسی
#project_managment_system مدیریت تیم
#free خارج از مبحث کامپیوتر
#app برنامههای کاربردی
#Git #actions مباحث مربوط به گیت و گیتلب
#conda #env کار با
#Docker مباحث مربوط به داکر
#AI #ML مباحث هوش مصنوعی
#book معرفی کتاب
#monitoring بررسی وضعیت سیستم و کد
#concurrency همزمانی کتاب grokking concurrency
#blovkchain #web3
#DDD #domain_driven_design
#BDD #behavior_driven_development
#soa #sso #microservice
@Code_Crafters
Git Hub:
https://github.com/CodeCrafters-ir/
لیست هشتکها در کانال رو در زیر براتون خواهم گذاشت و آپدیت خواهد شد
#design_patterns الگوهای طراحی
#postgresql پستگرس
#k8s کوبرنتیز
#agile اجایل
#scrum
#algorithm الگوریتم
#video
#meeting متینگ
#principles اصول کدنویسی
#project_managment_system مدیریت تیم
#free خارج از مبحث کامپیوتر
#app برنامههای کاربردی
#Git #actions مباحث مربوط به گیت و گیتلب
#conda #env کار با
#Docker مباحث مربوط به داکر
#AI #ML مباحث هوش مصنوعی
#book معرفی کتاب
#monitoring بررسی وضعیت سیستم و کد
#concurrency همزمانی کتاب grokking concurrency
#blovkchain #web3
#DDD #domain_driven_design
#BDD #behavior_driven_development
#soa #sso #microservice
@Code_Crafters
Git Hub:
https://github.com/CodeCrafters-ir/
👍1
چرا conda استفاده کنیم؟؟؟
اول اینکه نوع پایتون رو هم خودش براتون بالا میاره حین ساخت محیط و شما دیگه درگیر پیچیدگی و هندل کردن نصب و مدیریت چند نسخه مختلف پایتون نمیشید و حتی کار کردن باهاش از pyenv راحت تره و عوض کردن نسخه پایتونش هم راحت تره
۱-نصب پکیج هم داخلش راحته
۲-و علاوه بر خودش میتونید از pip هم استفاده کنید
۳- همچنین بروز رسانی پکیج
۲-و یا یک فایل حاوی ادرسهای آن جهت نصب بسازید
۳-و یا بصورت yaml براتون قرار میده که از دو بخش تشکیل شده پکیجهایی که خودش نصب کرده و پکیجهایی که با pip نصب شده
۲-مشاهده وابستگی های آن
۳-مشاهده پکیجها استفاده کننده آن
داخل کامنت ها هم نحوه نصبش رو در اوبونتو میزارم
#conda
#pip
#env
@code_crafters
اول اینکه نوع پایتون رو هم خودش براتون بالا میاره حین ساخت محیط و شما دیگه درگیر پیچیدگی و هندل کردن نصب و مدیریت چند نسخه مختلف پایتون نمیشید و حتی کار کردن باهاش از pyenv راحت تره و عوض کردن نسخه پایتونش هم راحت تره
conda create -n MyENV python=3.8دوم اینکه محیطی که براتون میسازه رو داخل home شما و در دایرکتوری مخصوص خودش میسازه و نه در مسیر جاری شما خب این مزیتش این هست که شما راحت هرجا باشید میتونید ۱-سریع فعال و ۲-غیرفعال و یا محیط خودتون رو تغییر بدید و یا بدون دغدغه نسبت به محل قرارگیریش محیط جدید بسازید و ۳-حذف هم کنید و بین محیطهای مختلف راحت سویچ کنید
1- conda activate my_envمورد بعدی هم اینکه:
2- conda deactivate
3- conda env remove -n MyENV
۱-نصب پکیج هم داخلش راحته
۲-و علاوه بر خودش میتونید از pip هم استفاده کنید
۳- همچنین بروز رسانی پکیج
1- conda install PackName۱-لیست پکیجهای نصب شده رو هم میتونید ببینید
2- pip install PackName
3- conda update PackName
۲-و یا یک فایل حاوی ادرسهای آن جهت نصب بسازید
۳-و یا بصورت yaml براتون قرار میده که از دو بخش تشکیل شده پکیجهایی که خودش نصب کرده و پکیجهایی که با pip نصب شده
1- conda listکه بالطبع میتونید اون رو هم در یک محیط دیگه نصب کنید
2- conda list --explicit
3- conda env export > requirements.yml
conda create -f requirements.ymlگفتیم همه محیطها رو در یک مسیر قرار میده که با دستور زیر هم میتونید لیست همه محیط هاتون رو ببینید
conda create -n MyENV -f requirements.yml
conda env list۱- اگه بخواید یکمحیط روحذف کنید ۲-یا یک پکیج رو حذف کنید
1- conda env remove -n MyENV --allبرای دیدن اطلاعات مربوط به محیط تون
2- conda remove PackName
conda infoجهت تست و بررسی سلامت محیط
conda doctorجهت تغییر نام محیط با شرط فعال نبودن محیط تون(فراموش نکنید conda یک محیط base داره که با دستور اولی فعال میشه)
conda activate۱-جستجوی پکیج با نمایش تاریخچه تگ آن
conda rename -n OldName NewName
۲-مشاهده وابستگی های آن
۳-مشاهده پکیجها استفاده کننده آن
1- conda search PackNameادغام محیط شل با conda
2- conda repoquery depends PackName
3- conda repoquery whoneeds PackName
conda init bashپاک کردن پکیجهای نا استفاده
conda cleanبرای کانفیگ از قبیل محیط نصب، پکیجها محدودیت دانلود و ...
conda configموضوع جالب اینکه هنگام نصب پکیج تمام وابستگیها رو اجرایی میکنه و نصب و حتی اگه نیاز به نسخه دیگری از پایتون باشه اون رو downgraid میکنه که منجر میشه تا حد ممکن براتون خطایی رخ نده و دردسر نکشید
conda config --help
داخل کامنت ها هم نحوه نصبش رو در اوبونتو میزارم
#conda
#pip
#env
@code_crafters
👍5❤1
خب بیاید یک کار کوچیک باهاش انجام بدیم
سیستم عامل من ubuntu 23.10 هستش که پایتون ۳.۱۱ روش نصب و من نیاز به نسخه ۳.۱۰ دارم و ...
و تک دستور زیر رو میزنم
طبق تصویر بالایی اکستنشن هارو با python intellisense, python debugger نصب کنید
تصویر پایین، بالا سمت راست (قرمز شده) کلیک میکنم و یک پنجره کشویی در vscode باز میکنه گزینه python environments و سپس محیط ML رو انتخاب میکنم( کرنل انتخاب شد)
در قسمت سمت راست فایلهام رو با .ipynb میسازم (قرمز شده)
الان محیط jupyter با intellisense دارم
#conda
#pip
#env
@code_crafters
سیستم عامل من ubuntu 23.10 هستش که پایتون ۳.۱۱ روش نصب و من نیاز به نسخه ۳.۱۰ دارم و ...
در حالت معمول من باید برم پایتون نسخه ۳.۱۰ رو نصب کنم بعد یک جایی محیطی بسازم که دست نخورده و محافظت شده بمونه برام و دپندنسی هارو نصب کنم و بعد پکیجهای مدنظرم رو و ... 😢😢😢خب قبل از هرچیزی vscode و conda رو نصب میکنم
و تک دستور زیر رو میزنم
conda create -n ML python=3.10 scikit-learn jupyterهمین ،خودش تمام دپندنسی هارو برام نصب میکنه و تموم و با یک خط دستور راه هزار ساله قبلی رو رفتم،حالا کافیه هرجایی که دوست دارم یک work directory بسازم و vscode رو اجرا کنم و work directory رو باز کنم
طبق تصویر بالایی اکستنشن هارو با python intellisense, python debugger نصب کنید
تصویر پایین، بالا سمت راست (قرمز شده) کلیک میکنم و یک پنجره کشویی در vscode باز میکنه گزینه python environments و سپس محیط ML رو انتخاب میکنم( کرنل انتخاب شد)
در قسمت سمت راست فایلهام رو با .ipynb میسازم (قرمز شده)
الان محیط jupyter با intellisense دارم
#conda
#pip
#env
@code_crafters
👍2
خب بریم سراغ داکرایز کردن پروژه با conda
عجله نکنید
بیاید قبلش یکم راجب محیطهای conda حرف بزنیم و بیشتر باهاش آشنا بشیم و درک کنیم conda چجوری باهاش کار میکنه
نکته هنگام نصب conda یک محیط خودش بصورت پیش فرض میسازه با نام base
با دستور زیر میتونید محیطها رو ببینید
خب ما محیط خودمون رو میسازیم و داخلش پکیجهامون رو نصب میکنیم و پروژه روتوسعه میدیم
میدونیم با دستور زیر یک فایل که حاوی پکیچها هست رو میسازیم
خط آخر رو پاک کنید یعنی prefix
حال اگه بخوایم این فایل رو مجدد نصب کنیم خطا میده
خط اول رو ببینید مقدار name این دقیقا اسم محیطمون هست
نکته conda میاد هم محیط رو میسازه و هم پکیچهاش رو نصب میکنه
قبلا گفتیم conda تمام محیطها رو در یک مسیر خاص قرار میده و میسازه (این مسیر کجاست مقدار prefix انتهای فایل که گفتیم پاک کنید) و خوب ما نمیتونیم دوتا محیط با یک اسم داشته باشیم (اگه محیط قبلی رو حذف کنید و دستور رو بزنید اجرا میشه) یا یکار باحالتر مقدار name رو داخل فایل بصورت دستی تغییر بدید و دستور رو بزنید باز هم کار خواهد کرد
تنها نکته باید بدونید این هست محیط تکراری نمیتونیم داشته باشیم، در ابتدای فایل اون name در واقع اسم محیطمون هست
اگه ما بخوایم پکیچهای این فایل رو در یک محیط دیگه نصب کنیم چکاری باید انجام بدیم؟؟؟
تصور کنید ما یک محیط دیگه با نام test داریم و میخوایم پکیچهای فایل requirements.yml رو داخلش نصب کنیم
داخل همین فایل مقدار name رو به test(اسم محیط مقصدمون) تغییر میدیم و دستور زیر رو میزنیم
چیاروفهمیدیم؟؟؟
حالا که محیط ها رو درک کردیم و فهمیدیم conda چجوری باهاشون رفتار میکنه ذره ذره آماده میشیم برای قدم اصلی
#conda
#pip
#env
@code_crafters
عجله نکنید
بیاید قبلش یکم راجب محیطهای conda حرف بزنیم و بیشتر باهاش آشنا بشیم و درک کنیم conda چجوری باهاش کار میکنه
نکته هنگام نصب conda یک محیط خودش بصورت پیش فرض میسازه با نام base
با دستور زیر میتونید محیطها رو ببینید
conda env listاین رو فراموش نکنید خیلی بکارمون میاد بعدا
خب ما محیط خودمون رو میسازیم و داخلش پکیجهامون رو نصب میکنیم و پروژه روتوسعه میدیم
conda env create -n venvحالا ما یک محیط با اسم venv داریم و یکسری پکیج داخلش نصب هست
conda activate venv
conda install django
میدونیم با دستور زیر یک فایل که حاوی پکیچها هست رو میسازیم
conda env export > requirements.ymlخروجی اون بشکل تصویر خواهد بود(تصویر رو در کامنت براتون میزارم حتما ببینید و بعد ادامه بدید)
خط آخر رو پاک کنید یعنی prefix
حال اگه بخوایم این فایل رو مجدد نصب کنیم خطا میده
conda env create -f requirements.ymlچرا؟؟؟
خط اول رو ببینید مقدار name این دقیقا اسم محیطمون هست
نکته conda میاد هم محیط رو میسازه و هم پکیچهاش رو نصب میکنه
قبلا گفتیم conda تمام محیطها رو در یک مسیر خاص قرار میده و میسازه (این مسیر کجاست مقدار prefix انتهای فایل که گفتیم پاک کنید) و خوب ما نمیتونیم دوتا محیط با یک اسم داشته باشیم (اگه محیط قبلی رو حذف کنید و دستور رو بزنید اجرا میشه) یا یکار باحالتر مقدار name رو داخل فایل بصورت دستی تغییر بدید و دستور رو بزنید باز هم کار خواهد کرد
تنها نکته باید بدونید این هست محیط تکراری نمیتونیم داشته باشیم، در ابتدای فایل اون name در واقع اسم محیطمون هست
اگه ما بخوایم پکیچهای این فایل رو در یک محیط دیگه نصب کنیم چکاری باید انجام بدیم؟؟؟
تصور کنید ما یک محیط دیگه با نام test داریم و میخوایم پکیچهای فایل requirements.yml رو داخلش نصب کنیم
داخل همین فایل مقدار name رو به test(اسم محیط مقصدمون) تغییر میدیم و دستور زیر رو میزنیم
conda env update -f requirements.ymlمیره و این پکیجهارو در محیط test که داریم نصب میکنه داخلش
چیاروفهمیدیم؟؟؟
یک محیط داریم همیشه با اسم base
وقتی فایل requirements.ymlرو میسازیم قسمت prefix رو پاک میکنیم و کنترل کردن مقدار name در فایل خیلی مهم هست که بتونیم با دستورات create و update کار کنیم
نمیتونیم محیط با اسم تکراری داشته باشیم
و اینکه conda با دستور create محیط رو هم برامون میسازه و با دستور update به محیطی که داریم وصل میشه
حالا که محیط ها رو درک کردیم و فهمیدیم conda چجوری باهاشون رفتار میکنه ذره ذره آماده میشیم برای قدم اصلی
#conda
#pip
#env
@code_crafters
👍2
خب برسیم به قسمت جالب کار چطور از conda داخل داکر استفاده کنیم
سناریو از این قرار هست ما یک محیط ساخته و میخوایم الزامات راه اندازی جنگو رو داشته باشیم
اول از همه ایمیج مدنظرمون رو از داکرهاب میگیریم
این ایمیج محتوی conda و python3.11 هست هر دو رو داخل خودش داره
ما میخوایم پکیجهای خودمون رو که داخل فایل requirements.yml هست نصب کنیم
میدونیم از دوتا دستور میشه استفاده کرد
تو ایمیجش هم این ماجرا صحت داره پس ما میتونیم که از دستور دومی استفاده کنیم
منتها یک قاعده داشتیم اون هم این بود مقدار name در فایل requirements.yml رو به base تغییر بدیم
با فرض بر این که میخوایم یک اپلیکیشن جنگویی ساده رو بالا بیاریم داکرفایل رو مینویسیم
پس داکر فایل ما به شکل زیر خواهد بود
ما داریم از gunicorn با gevent استفاده میکنیم و برای اجرای اپ جنگویی لازم هست که دستور مربوطه رو در شل کانتینر اجرا کنیم
اما سوال پیش میاد ما الان پکیجهامون رو داخل محیط base داریم و شل هم یجای دیگه کار میکنه خب چطور اینارو باهم ارتباط بدیم
در پست اول راجب conda یک دستور خوندیم
حالا یک داکر فایل ساده مینویسیم
حالا بریم واسه اجرا کردنش
پایتون نسخه 3.10 مگه ما اول کار نگفتیم این ایمیج پایتون نسخه 3.11 هست
درسته داخل دپندنسی فایل requirements.yml هر نسخه از پایتون باشه conda وضعیت رو تغییر میده برامون
حالا از پایتون بیایم بیرون و پکیج هارو نگاه کنیم
یک سوال ازتون میپرسم اگر ما مقدار name در فایل requirements.yml رو به base تغییر ندیم شیوه کاریمون چجوری میشد؟؟؟
#conda
#pip
#env
@code_crafters
سناریو از این قرار هست ما یک محیط ساخته و میخوایم الزامات راه اندازی جنگو رو داشته باشیم
conda env create -n venv python=3.10 django gunicorn geventبریم واسه داکرایز کردنش
conda activate venv
django-admin startproject config .
conda env export > requirements.yml
اول از همه ایمیج مدنظرمون رو از داکرهاب میگیریم
docker pull continuumio/miniconda3ما ایمیج رو گرفتیم و داخل Dockerfile ازش استفاده میکنیم
این ایمیج محتوی conda و python3.11 هست هر دو رو داخل خودش داره
ما میخوایم پکیجهای خودمون رو که داخل فایل requirements.yml هست نصب کنیم
میدونیم از دوتا دستور میشه استفاده کرد
conda env create -f requirements.ymlتو پست قبل بهتون گفتم یادتون بمونه که conda همیشه خودش یک محیط درست میکنه با اسم base
conda env update -f requirements.yml
اولی محیط رو هم برامون ایجاد میکرد
دومی روی یک محیط از قبل موجود پکیجهارو نصب میکرد
تو ایمیجش هم این ماجرا صحت داره پس ما میتونیم که از دستور دومی استفاده کنیم
منتها یک قاعده داشتیم اون هم این بود مقدار name در فایل requirements.yml رو به base تغییر بدیم
با فرض بر این که میخوایم یک اپلیکیشن جنگویی ساده رو بالا بیاریم داکرفایل رو مینویسیم
پس داکر فایل ما به شکل زیر خواهد بود
FROM continuumio/miniconda3خب ادامه بدیم و یک داکر کامپوز ساده هم بنویسیم براش
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY . /code/
RUN /bin/bash -c "conda env update -f requirements.yml"
EXPOSE 8000
ما داریم از gunicorn با gevent استفاده میکنیم و برای اجرای اپ جنگویی لازم هست که دستور مربوطه رو در شل کانتینر اجرا کنیم
اما سوال پیش میاد ما الان پکیجهامون رو داخل محیط base داریم و شل هم یجای دیگه کار میکنه خب چطور اینارو باهم ارتباط بدیم
در پست اول راجب conda یک دستور خوندیم
conda run
کارش هم این بود که دستور شل رو با یک محیط conda ترکیب کنه
نکته جالب هروقت جایی لازم بود داخل دستور conda محیط رو مشخص کنید با سویچ n myenv- و اینکار رو نکنید conda پیش فرض محیط base رو در نظر میگیره
جالب شد همین کار مارو راه میندازه
حالا یک داکر فایل ساده مینویسیم
version: '3'
services:
conda:
build: .
image: conda-test
hostname: conda
container_name: conda
restart: on-failure
command: sh -c "conda run gunicorn -k gevent --workers 4 config.wsgi:application -b 0.0.0.0:8000"
expose:
- 8000
ports:
- 8000:8000
حالا بریم واسه اجرا کردنش
docker compose up -dیکم صبر کنید تا کار تموم بشه
docker psکانتینر در حال اجراست و لاگ هم اروری نداریم بریم داخل کانتینر یچیز جالب رو باهم نگاه کنیم
docker logs conda
docker exec -it conda bashچه چیزی رو میبینید؟؟؟
python
پایتون نسخه 3.10 مگه ما اول کار نگفتیم این ایمیج پایتون نسخه 3.11 هست
درسته داخل دپندنسی فایل requirements.yml هر نسخه از پایتون باشه conda وضعیت رو تغییر میده برامون
حالا از پایتون بیایم بیرون و پکیج هارو نگاه کنیم
conda env listکار تمومه کانتینر ما داره کار میکنه و تونستیم با درک شیوه کار کرد conda کارمون رو راه بندازیم
همه پکیجها نصب هستش
یک سوال ازتون میپرسم اگر ما مقدار name در فایل requirements.yml رو به base تغییر ندیم شیوه کاریمون چجوری میشد؟؟؟
#conda
#pip
#env
@code_crafters
👍3