آموزش پایتون

آموزش ساخت محیط مجازی (Virtual Environments) در پایتون (venv) به همراه نصب فریمورک جنگو

Virtual Environments یا Virtualenv در پایتون چیست؟

محیط مجازی یا Virtual Environment در حقیقت یک Sandbox است.

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

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

مثلا فرض کنید میخواهیم یک پروژه جنگو یا اسکراپی جدید بسازیم. برای این کار، یک فولدر به نام پروژه ایجاد می کنیم. حالا داخل این فولدر یک VirtualEnv میسازیم که خود فایل اجرایی پایتون و پکیج های مورد نیاز داخل آن نصب میشود.

این فایل اجرایی پایتون و پکیج هایی که اینجا داخل VirtualEnv نصب میشود از فایل اجرایی پایتون که به صورت سراسری داخل سیستم عامل شما نصب شده،‌ جداست. و هر دستکاری در این پکیج ها انجام بدهید، روی فایلهای اصلی پایتون و سایر اپلیکیشن هایی که روی سیستم یا سرور دارید، ‌تاثیری نمی گذارد.

با این روش ما اپلیکیشن خودمان را ایزوله می کنیم و آن را در یک محیط امن (از نظر عدم تداخل و Conflict با سایر اپلیکیشن ها) توسعه می دهیم.

نصب Virtualenv به صورت سراسری

دقت کنید که اگر پایتون رو به صورت سراسری نصب کردید،‌VirtualEnv رو هم باید به صورت سراسری نصب کنید.

یعنی چی؟

وقتی ما پایتون رو روی یک سیستم نصب می کنیم،‌ میتونیم اون رو به صورت سراسری نصب کنیم یا اینکه اون رو برای یک کاربر نصب کنیم.

تفاوتش این خواهد بود که در حالت سراسری،‌ فایلهای اجرایی و اسکریپت ها و پکیج های پایتون در فولدر ProgramFiles/Python3.x ذخیره میشه.

ولی در صورتی که برای یک کاربر نصبش کنیم، میره در مسیر ueser/appdata و در یک مسیر طولانی ذخیره میشه. این داستان رو در قسمت نصب پایتون براتون توضیح دادم.

حالا اگر بخواید VirtualEnv یا هر پکیج دیگری رو از ظریق خط فرمان نصب کنید، به صورت پیشفرض میره و در مسیر users/appdata فایلش رو کپی می کنه! و اصلا نگاه نمی کنه ببینه فایل اجرایی اصلی پایتون در کجا قرار گرفته.

همونطور که می بینید، توی اولین warning، نوشته که virtualenv در مسیر یوزر نصب شده . و این مسیر در PATH ویندوز وجود نداره.

حالا برای اینکه به صورت یک دستور سراسری بتونیم از virtualenv استفاده کنیم، دوتا کار می تونیم بکنیم.

راه اول: مسیر فایل نصب شده ی virtualenv رو در PATH ویندوز اضافه کنیم.

راه دوم: فایل نصب شده virtualenv رو کپی کنیم و ببریم در فولدر scripts در محل نصب پایتون، جایگذاری کنیم.

استفاده از پکیج منیجر pip برای نصب پکیج VirtualEnv در پایتون

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

pip --version

در صورتی که همه چیز مرتب باشه باید اطلاعات مربوط به pip رو براتون بنویسه:‌

پکیج منیجر پایتون pip

بعد از اینکه از نصب بود و صحت کارکرد پکیج منیجر pip مطمئن شدین، میریم و VirtualEnv رو از طریق pip نصب می کنیم:‌

pip install virtualenv

//linux: 

sudo pip install virtualenv

اگر بعد از نصب VirtualEnv در سیستم، با اجرای کد virtualenv –version بهتون پیام خطا داد،‌دلیلش اینه که فولدر محل نصب virtualenv رو در مسیر PATH ویندوز وارد نکردید.

ایجاد و اکتیو کردن Virtualenv در مسیر پروژه

اول یک پوشه برای پروژه‌مان می‌سازیم. چون این اولین پروژه و فقط به منظور تست است، لازم نیست نامی خاص برایش انتخاب کنیم. نامش را مثلاً myproject می‌گذاریم.

در خط فرمان در مسیر پوشه‌ی myproject:

virtualenv venv

با استفاده از دستور فوق، یک فولدر به نام venv در مسیر پروژه ساخته میشه و virtualenv در اون نصب میشه.

حالا برای اینکه بقیه کارها (مثل نصب و اجرای پکیج ها) رو در محیط امن virtualenv انجام بدیم،‌ باید در همون مسیر پوشه myproject، محیط مجازی virtualenv رو فعال (activate) کنیم:

//Windows
venv\Scripts\activate

//Linux
source venv/bin/activate

بعد از فعالسازی venv در مسیر پروژه،‌می بینید که به ابتدای مسیری که در خط فرمان نوشته دشه بود،‌عبارت (venv) اضافه شده. یعنی اینکه الان در حال کار در محیط مجازی هستید:

فعالسازی venv در پایتون

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

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

با کد زیر می‌توانید محیط venv را غیرفعال کنید:

//windows
venv\Scripts\deactivate.bat

//Linux
source venv/bin/deactivate

اما لازم است که آن را برای نصب پکیج های مورد نظرمان فعال نگه داریم.

حل مشکل ارور venv scripts activate.ps1 is not digitally signed در هنگام اکتیو کردن venv

ممکنه موقع اکتیو کردن venv در پوشه، به ارور فوق برخورد کنید.

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

راه حل این مشکل به صورت زیر هستش:

  • ابتدا powershell رو در حالت administrator اجرا می کنیم.
  • بعد دستور زیر رو در پاورشل میزنیم و اجرا می کنیم
Set-ExecutionPolicy Unrestricted -Force
حل ارور venv در powershell

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

نصب فریمورک جنگو از طریق pip بر روی venv

برای نصب جنگو، بعد از فعالسازی venv، دستور زیر رو می زنیم:‌

pip install django

نصب فریمورک جنگو
دقت کنید همچنان پیشوند (venv) در خط فرمان فعال است.

بعد از نصب جنگو، هیچ فایلی در روت پوشه پروژه شما ایجاد نمیشه. بلکه دو فایل جدید در مسیر venv/scripts ساخته میشه:‌

ساخت یک پروژه جدید جنگو در venv

برای ساخت یک پروژه‌ی جنگو، (در حالی که venv اکتیو است) دستور زیر را اجرا کنید:

django-admin startproject myproject

واسط دستوری django-admin به صورت خودکار با جنگو نصب می‌شود.

پس از اجرای دستور بالا، ساختار دایرکتوری اولیه‌ی یک پروژه‌ی جنگو ساخته می‌شود.

در حال حاضر، پوشه‌ی myproject به شکل زیر است:

myproject/                  <-- higher level folder
 |-- myproject/             <-- django project folder
 |    |-- myproject/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    +-- manage.py
 +-- venv/                  <-- virtual environment folder
  • init.py: این فایل خالی به پایتون می‌گوید که این پوشه یک پکیج پایتون است.
  • settings.py: این فایل حاوی تمامی کانفیگریشن‌های پروژه است. بسیار به این فایل ارجاع می‌دهیم!
  • urls.py: این فایل مسئول Map کردن روت‌ها و مسیرهای پروژه است. برای مثال، اگر بخواهیم چیزی را در URL /about/ نمایش دهیم، باید آن را اول در این فایل Map کنیم. (مشابه روتینگ در node.js و لاراول)
  • wsgi.py: این فایل یک واسط دروازه‌ی (Gateway Interface) ساده برای توسعه است. فعلاً نگرانش نباشید و آن را به حال خود رها کنید.

راه اندازی وب سرور توسط جنگو

این کار مشابه راه اندازی سرور توسط Express.js در node.js هستش.

اما فرقش اینه که دستور راه اندازی سرور در اکسپرس، داخل کدهای برنامه نوشته میشه، ولی برای جنگو کدهای مربوط به راه اندازی وب سرور رو داخل خط فرمان و در محیط venv اجرا می کنیم.

(داکیومنت های نصب و اجرای سرور رو در سایت جنگو ببینید)

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

python manage.py runserver 8000

فعلاً می‌توانید خطاهای Migration را نادیده بگیرید. بعداً به آنها می‌پردازیم.

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

localhost:8000

یا

http://127.0.0.1:8000

صفحه اول اجرای جنگو در لوکال هاست

برای متوقف کردن سرور، CTRL+BREAK را بزنید.

برای نصب جنگو این مقاله خیلی کمکم کرد. البته داکیومنت های سایت جنگو هم عالی هستن.

حامد عسکریان

برنامه نویس و عاشق تکنولوژی

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

دکمه بازگشت به بالا
بستن
بستن