การใช้งาน Virtualenv

การใช้งาน Virtualenv

Virtualenv คืออะไร

Virtualenv(ironment) คือ environment ของ python เช่น คุณทำโปรแกรมอยู่ 2 ตัว A กับ B แล้วเวลาคุณจะติดตั้ง library ถ้าคุณ pip install ลงไปเลย

  • library ที่คุณใช้กับงาน A กับปนมั่วกับงาน B

เช่น เวลาจะทำไฟล์ requirement เพื่อให้คนอื่น สามารถติดตั้ง library ที่ใช้กับงานเราได้สะดวกมากขึ้นก็กลับกลายเป็นว่า งาน A ใช้ 5 library งาน B ใช้ 10 Libray สรุป คนที่เอาโปรแกรมเราไม่ไปใช้ก็ไม่รู้ว่า โปรแกรมเราใช้ library อะไรบ้างก็ต้องติดตั้งทั้งหมด 15 library

  • หรือแบบไม่สามารถแยก version ของ library กันได้

เช่น งาน A ใช้ OpenCV 3 แต่ งาน B ใช้ OpenCV 4 ทำไงให้ลง 2 version พร้อมกันได้ละ ก็ต้องให้เจ้า Virtualenv ช่วยเราไง

โดยเจ้า Virtualenv จะสร้าง environment ใหม่ขึ้นมา ที่มีแต่ตัว Python เปล่าๆ แล้วเวลาเราติดตั้ง library อะไรไปมันก็จะเก็บไว้ใน Folder ของ environment แต่ละตัวไม่มาปนกัน

ตอนนี้อาจจะ งง เดี๋ยวไปลองติดตั้งแล้วใช้งานจริงกันเลยดีกว่าครับ

การติดตั้ง Virtualenv

เราจะติดตั้ง Virtualenv ผ่าน pip กันนะครับ โดยการพิมพ์ command

pip install virtualenv

การใช้งาน Virtualenv

สมมติ ผมทำโปรเจค image_enhancement อยู่ผมก็จะเข้าไปใน folder โปรเจคของผม

ในทีนี้ผมจะสร้าง python environment ชื่อ env โดยสั่ง

virtualenv.exe venv

เวลาจะใช้งานก็สั่ง command

.\venv\Scripts\activate

pip 00

Note:

สำหรับใครที่ใช้ Virtualenv แล้วติดปัญหาเกี่ยวกับ execution policies แบบในรูปด้านล่าง

virtualenv error

ก็ให้เปิด Powershell หรือ Command Prompt แบบ Admin แล้วสั่ง

Set-ExecutionPolicy AllSigned

กับ

Set-ExecutionPolicy RemoteSigned

โดยจะเลือกแบบ Yes หรือ Yes to All ก็ได้ ดูรายละเอียดได้จาก User Guid ของ virtualenv ครับ

กลับมาเข้าเรื่องของเราต่อครับ เมื่อเราสั่ง activate แล้วจะมีชื่อ environment ของเราอยู่หน้าบรรทัดของ powershell หรือ command

การใช้งาน Virtualenv (ต่อ)

คราวนี้ถ้าเราอยากรู้ว่า environment ของเรามี library อะไรอยู่บ้างก็ให้ลองสั่ง

pip freeze

ซึ่งเราจะยังไม่เห็น library ใดๆ คราวนนี้เรามาลองติดตั้ง library OpenCV กัน

pip install opencv-python

แล้วลอง pip freeze อีกรอบ เราก็จะเห็นว่ามี library OpenCV เพิ่มเข้ามา

numpy==1.16.3
opencv-python==4.1.0.25

ทีนี้ก็มาลองทดสอบ library ที่เพิ่งลงกันครับ

use cv2

ถ้าเราใช้งาน environment เสร็จแล้ว ก็ให้สั่ง

deactivate

เพื่อออกจาก environment นั้น

ประโยชน์ของ Virtualenv

สมมติ ว่าเราทำโปรเจคเสร็จ แล้วคนอื่นอยากนำไปใช้งานต่อ ให้เราสั่ง

pip freeze > requirement.txt

เพื่อจะรวบรวม library ไว้ในไฟล์ requirement.txt เราอาจจะใช้ชื่อไฟล์อื่นก็ได้นะครับ

pip freeze

เวลาคนอื่นเอาไปใช้ เค้าก็จะสั่ง

pip install -r <file requirement>

เจ้า pip ก็จะลง library ทุกตัวให้อัตโนมัติ ของเพียงแค่ version ของ python เหมือนกัน เพราะ บางทีถ้าเรา freeze library จาก python 3.7 แล้วไปลงใน python 3.6 version ของ library บางตัวอาจจะไม่มีก็ได้ครับ

สรุป

Command Descriptions
virtualenv สร้าง environment
/Scripts/activate ใช้งาน environment
deactivate ออกจาก environtment
pip install ติดตั้ง library
pip freeze แสดงรายชื่อ library
สัญลักษณ์ > เป็นการบอกให้เขียนใส่

ที่มาบทความ skconan.com.