การใช้ Virtual Environment ใน python

เมื่อเราทำโปรเจ็คท์ขนาดใหญ่เราจะเจอปัญหาว่าแต่ละโปรเจ็คท์ใช้แพคเกจและเวอร์ชั่นที่ต่างกัน แนวคิด virtual environment คือแยกตำแหน่งที่ติดตั้งแพคเกจของแต่ละโปรเจ็คท์ออกจากกัน

ไม่ว่าคุณสร้างโปรเจ็คท์ใหม่หรือเพียงแค่ต้องการสร้างพื้นที่สำหรับทดลองเรียนรู้แพคเกจใหม่ๆ การสร้าง virtual environment เป็นสิ่งที่จำเป็นเพราะทำให้คุณไม่ต้องไปติดตั้งแพคเกจทั้งหมดลงที่ที่เดียว

ติดตั้ง virtualenv

virtualenv เป็นโปรแกรมที่ใช้สำหรับสร้างโฟลเดอร์ที่ใช้สำหรับเก็บแพคเกจที่จะใช้ในโปรเจ็คท์ใครโปรเจ็คท์มัน ซึ่งติดตั้งผ่าน command prompt ด้วยคำสั่ง

#สำหรับ Windows & Linux
python -m pip install --user virtualenv
#สำหรับ Linux
sudo apt install python3-venv

จากนั้นก็สร้างโฟลเดอร์ด้วยคำสั่ง

C:\Users\username\mypy\web\virtualenv myenv

จะมีโฟลเดอร์ชื่อ myenv ภายใต้โฟลเดอร์ project1 ซึ่งจะเก็บ package เฉพาะสำหรับโปรเจ็คท์นี้เมื่อเราสั่งติดตั้งแพคเกจด้วยคำสั่ง pip ก็จะนำไปเก็บที่

C:\Users\username\mypy\web\myenv\lib\python3.10\site-packages

Note :
หากไม่ได้อยู่ใหมด virtual environment แพคเกจที่ติดตั้งด้วย pip จะไปอยู่ที่
C:\Users\username\AppData\Local\Programs\python\python310\lib\site-packages

การ switch ไปที่โหมด virtual environment

ให้เปลี่ยนโฟลเดอร์ไปที่ C:\Users\username\mypy\project1\myenv\Scripts\ แล้วรันคำสั่ง activate

C:\Users\username\mypy\web>cd myenv\Scripts
C:\Users\username\mypy\web\myenv\Scripts>activate

หรือ

C:\Users\username\mypy\web>myenv\Scripts\activate
(myenv)C:\Users\username\mypy\web>

อย่างเช่นหากเราติดตั้ง sympy ในขณะที่อยู่ในโหมดนี้

(myenv)C:\Users\username\mypy\web>pip install sympy

แพคเกจก็จะไปติดตั้งอยู่ภายใต้ project1 นี้ (ดู path ข้างบน แต่ไม่จำเป็นต้องสนใจ) ต่อจากนี้หากเรารันโปรแกรมภายในโหมดนี้เมื่อพบคำสั่ง from sympy import * โปรแกรมก็จะไปหา sympy จาก copy ที่ติดตั้งภายในโปรเจ็คท์นี้แทน ซึ่งหากไม่ได้ติดตั้งก็จะ error แม้ว่าจะมีการติดตั้ง sympy ที่ส่วนกลางไว้

(myenv)C:\Users\username\mypy\web>python test.py

การใช้ virtual environment ใน jupyter notebook

เราจะต้องติดตั้ง jupyter note อีก copy หนึ่งในโหมดนี้ต่างหาก

(myenv)C:\Users\username\mypy\web>pip install jupyter

Jupyter จะให้เราสร้างสิ่งที่เรียกว่า kernel ซึ่งคล้ายกับเป็นตัวแทนของ virtual environment เวลาที่เรารัน jupyter ให้ใช้คำสั่ง

(myenv)C:\Users\username\mypy\web>ipython kernel install --user --name=web-venv

คำสั่งนี้จะผูกแพคเกจที่ติดตั้งภายใต้ virtual environment ที่เรากำลัง active อยู่นี้เข้ากับ kernel ของ jupyter ที่ชื่อว่า web-venv ซึ่งเราสามารถตรวจสอบด้วยคำสั่ง

(myenv)C:\Users\username\mypy\web>jupyter kernelspec list

เอาท์พุทคือ

Available kernels:
  web-venv   C:\Users\username\AppData\Roaming\jupyter\kernels\web-venv
  python3    C:\Users\username\mypy\web\myenv\share\jupyter\kernels\python3

คุณไม่จำเป็นต้องซีเรียสกับ path จริงเพียงแต่สังเกตว่ามีสอง kernel ชื่อ web-venv และ python3 ว่าจากนั้นให้รัน jupyter notebook ที่ command prompt (จะอยู่ในโหมด virtual หรือไม่ก็ได้) สังเกตว่าที่มุมขวาจะมี kernel ให้เลือก คลิกที่เราต้องการใช้คือ proj1_env แล้วเขียนโปรแกรมตามปกติแต่เมื่อเราสั่งรันโปรแกรมคำสั่ง from package-name import * จะวิ่งไปหาแพคเกจที่อยู่ใน แทน

เลือก kernel ที่ต้องการ

จากนั้นก็ใช้ jupyter ตามปกติ เพียงแต่ว่าเวลาเราสั่ง import แพคเกจก็จะมาจาก path ในโหมด virtual แทน

การยกเลิก virtual environment

หากต้องการกลับไปยังโหมดปกติให้ใช้คำสั่ง deactivate ซึ่ง (myenv) จะหายไปซึ่งต่อไปนี้การใช้ python หรือ pip จะอ่านแพคเกจจากส่วนกลาง

(myenv)C:\Users\username\mypy\web>myenv\Scripts\deactivate
C:\Users\username\mypy\web>

หรือง่ายกว่าก็คือปิด command prompt นั้นไปแล้วเปิดใหม่ และหากต้องการลบ kernel ก็ใช้คำสั่ง

(myenv)C:\Users\username\mypy\web>jupyter kernelspec uninstall web-venv

สรุป

Virtual environment คือการสร้างโฟลเดอร์พิเศษขึ้นมาภายใต้โปรเจ็คท์ของเราเพื่อใช้สำหรับเก็บแพคเกจเฉพาะโปรเจ็คท์นั้นซึ่งทำโดยคำสั่ง virtualenv จากนั้นเราก็จะทำการ activate โหมด virtual ด้วยคำสั่ง activate จากนี้ไปเมื่อเราสั่งรันโปรแกรมด้วยคำสั่ง python หรือติดตั้งแพคเกจใหม่ด้วยคำสั่ง pip ก็จะอ่านและติดตั้งแพคเกจลงบนโฟลเดอร์เฉพาะโปรเจ็คท์นี้

Facebook Comments Box
จรัสพรรณ เปรมปรีบุตร