Python Virtualenv และ Venv do's and don'ts

หนึ่งในสิ่งที่ดึงดูดมากที่สุดของ Python คือระบบนิเวศที่กว้างขวางของแพ็คเกจของบุคคลที่สาม หากมีงานที่คุณต้องการดึงออกมาไม่ว่าจะเป็นการแปลงรูปแบบไฟล์การขูดและการปรับโครงสร้างหน้าเว็บการถดถอยเชิงเส้นคุณจะตั้งชื่อมันว่ามีโอกาสที่แพ็คเกจอย่างน้อย 1 รายการใน Python Package Index จะตอบสนองความต้องการของคุณ

ส่วนที่ยากคือการจัดการการสะสมของแพ็คเกจในการติดตั้ง Python ที่กำหนด ทุกอย่างง่ายเกินไปที่จะติดตั้งแพ็กเกจหลายสิบแบบโดยไม่คิดหน้าคิดหลังและในที่สุดก็จบลงด้วยสภาพแวดล้อม Python ที่เต็มไปด้วยความขัดแย้งระหว่างเครื่องมือรุ่นเก่าและรุ่นใหม่ทำให้ทำงานยากกว่าที่ควรจะเป็น

Python มาพร้อมกับระบบอัตโนมัติในการเก็บชุดแพ็คเกจไว้ในเครื่องสำหรับโครงการ Python ที่กำหนด สภาพแวดล้อมเสมือนซึ่งได้รับความอนุเคราะห์จากvirtualenvเครื่องมือใน Python 2 และvenvใน Python 3 สามารถใช้เพื่อสร้างอินสแตนซ์ที่แยกจากกันของรันไทม์ Python สำหรับโปรเจ็กต์โดยมีส่วนเสริมของแพ็กเกจของตัวเอง

ในบทความนี้เราจะอธิบายถึงข้อผิดพลาดทั่วไปบางประการที่ผู้คนทำและเข้าใจว่าพวกเขายอมจำนนเมื่อทำงานกับสภาพแวดล้อมเสมือนจริงใน Python 

ใช้สภาพแวดล้อมเสมือน Python 

ข้อผิดพลาดที่พบบ่อยประการแรกโปรแกรมเมอร์ Python ทำขึ้นvirtualenvหรือ  venvเพียงแค่ไม่ต้องกังวลกับมัน หากสิ่งที่คุณทำคือการรวบรวมสคริปต์ที่รวดเร็วและสกปรกเพื่อทำสิ่งเล็ก ๆ น้อย ๆทำไมต้องตั้งค่าสภาพแวดล้อมเสมือนจริงเลยล่ะ?

ปัญหาคือ“ สิ่งเล็ก ๆ น้อย ๆ ” มักจะกลายเป็นเรื่องมากและมากกว่านั้นมาก เมื่อความเชี่ยวชาญ Python ของคุณเติบโตขึ้นคุณจะต้องดึงโมดูลของบุคคลที่สามเข้ามามากขึ้นเพื่อทำงานที่ซับซ้อนมากขึ้นอย่างหลีกเลี่ยงไม่ได้ ยิ่งไปกว่านั้นคุณจะพบว่าการจัดการกับการพึ่งพาแพ็กเกจเวอร์ชันก่อนหน้านั้นยากขึ้นเรื่อย ๆ ซึ่งเป็นหนึ่งในปัญหาสำคัญของสภาพแวดล้อมเสมือนที่สร้างขึ้นเพื่อแก้ไข

บางคนยังย่นจมูกเมื่อใช้virtualenvหรือ  venvเนื่องจากสภาพแวดล้อมเสมือนจริงแต่ละแห่งเป็นสำเนาของรันไทม์ Python เพียงเล็กน้อยโดยใช้เนื้อที่ประมาณ 25MB แต่พื้นที่ดิสก์มีราคาถูกมากในทุกวันนี้และการลบสภาพแวดล้อมเสมือนนั้นทำได้ง่ายพอ ๆ กับการลบไดเรกทอรี (ไม่มีผลข้างเคียง) นอกจากนี้หากคุณมีงานหลายอย่างที่ใช้ชุดแพ็กเกจร่วมกันคุณสามารถใช้สภาพแวดล้อมเสมือนเดียวกันสำหรับทั้งสองงานได้ตลอดเวลา

ใช้ Virtualenvwrapper เพื่อจัดการสภาพแวดล้อมเสมือน Python

virtualenvwrapperวิธีการหนึ่งที่จะทำให้สภาพแวดล้อมเสมือนภาระน้อยลงคือการใช้งาน เครื่องมือนี้ช่วยให้คุณสามารถจัดการสภาพแวดล้อมเสมือนทั้งหมดในพื้นที่ทำงานของคุณได้จากแอปบรรทัดคำสั่งส่วนกลางเดียว

คำแนะนำเกี่ยวกับการสร้างสภาพแวดล้อมเสมือน: อย่าตั้งชื่อไดเร็กทอรีของสภาพแวดล้อมเสมือนของคุณ  venvหรือสำหรับเรื่องนั้นชื่อของแพ็กเกจอื่น ๆ ที่คุณต้องการใช้ในสภาพแวดล้อมเสมือน ซึ่งอาจมีผลกระทบที่คาดเดาไม่ได้ในการนำเข้าในภายหลัง ใช้ชื่อที่อธิบายโครงการของคุณอย่างไม่น่าสงสัย

อย่าวางไฟล์โครงการไว้ในสภาพแวดล้อมเสมือน Python

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

  • แผนผังไดเร็กทอรีโปรเจ็กต์ของคุณอาจมีหลักการตั้งชื่อที่ชนกับองค์ประกอบของสภาพแวดล้อมเสมือน
  • วิธีง่ายๆในการลบสภาพแวดล้อมเสมือนคือการลบไดเร็กทอรี การผสมผสานไฟล์โปรเจ็กต์กับสภาพแวดล้อมเสมือนหมายความว่าคุณต้องแยกทั้งสองออกจากกันก่อน
  • หลายโครงการอาจใช้สภาพแวดล้อมเสมือนเดียวกัน

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

อย่าลืมเปิดใช้งานสภาพแวดล้อมเสมือน Python ของคุณ 

ข้อผิดพลาดทั่วไปอีกประการหนึ่งที่ผู้คนทำกับสภาพแวดล้อมเสมือนจริงคือลืมเปิดใช้งานหรือไม่เปิดใช้งานสิ่งที่ถูกต้อง

ก่อนที่สภาพแวดล้อมเสมือนจะสามารถใช้ในเซสชันเชลล์เฉพาะได้จำเป็นต้องเปิดใช้งานโดยใช้สคริปต์ที่มีชื่อactivateอยู่ในScriptsไดเร็กทอรีของสภาพแวดล้อมเสมือน เมื่อเปิดใช้งานสภาพแวดล้อมเสมือนจะถือว่าเป็นอินสแตนซ์ Python เริ่มต้นจนกว่าคุณจะปิดใช้งาน (โดยการรันdeactivateคำสั่ง)

เป็นเรื่องง่ายที่จะลืมขั้นตอนนี้ในตอนแรกเนื่องจากเป็นนิสัยที่ต้องได้รับและเนื่องจากสคริปต์การเปิดใช้งานอยู่ในระดับหนึ่งในไดเร็กทอรีสภาพแวดล้อมเสมือน เทคนิคสองสามข้อมีประโยชน์ที่นี่:

  1. สร้างทางลัดไปยังสคริปต์การเปิดใช้งาน / การปิดใช้งานในไดเร็กทอรีรากของโปรเจ็กต์ของคุณ คุณสามารถตั้งชื่อทางลัดเหล่านั้นให้เรียบง่ายเช่นactและdeactเพื่อให้พิมพ์ไม่น่ารังเกียจ
  2. สำหรับโปรเจ็กต์ที่คุณทำงานจาก IDE และไม่ใช่บรรทัดคำสั่งให้สร้างตัวเรียกใช้โปรเจ็กต์ซึ่งเป็นไฟล์แบตช์หรือเชลล์สคริปต์สำหรับแอป Python ที่เป็นปัญหา สิ่งนี้ช่วยให้คุณเรียกใช้สคริปต์การเปิดใช้งานจากนั้นเรียกใช้สคริปต์ของคุณเองในภายหลัง โดยทั่วไปคุณไม่จำเป็นต้องปิดใช้งานสภาพแวดล้อมของสคริปต์หลังจากการรันเนื่องจากเซสชันจะสิ้นสุดลงเอง

เคล็ดลับสุดท้ายนี้เน้นย้ำประเด็นสำคัญเกี่ยวกับการเปิดใช้งานสภาพแวดล้อมเสมือน: ใช้กับเซสชันสภาพแวดล้อมที่รันอยู่เท่านั้นตัวอย่างเช่นหากคุณเปิดเซสชันบรรทัดคำสั่งสองเซสชันและเปิดใช้งานสภาพแวดล้อมเสมือนในหนึ่งเซสชันบรรทัดคำสั่งอื่นจะใช้ การติดตั้ง Python เริ่มต้นของระบบไม่ใช่สภาพแวดล้อมเสมือน คุณไม่ได้เปิดใช้งานสภาพแวดล้อมเสมือนสำหรับระบบโดยรวมแต่เฉพาะสำหรับเซสชันที่ระบุเท่านั้น

อย่าใช้  >=สำหรับการตรึงเวอร์ชันแพ็กเกจในสภาพแวดล้อมเสมือน Python

เคล็ดลับนี้มีประโยชน์นอกสภาพแวดล้อมเสมือนเช่นกัน เมื่อคุณมีแอพที่มีrequirements.txtไฟล์คุณควรระบุแพ็กเกจที่มีหมายเลขเวอร์ชันที่แน่นอน พูดไม่ได้mypackage==2.2mypackage>=2.2

นี่คือเหตุผล เหตุผลหลักประการหนึ่งในการใช้สภาพแวดล้อมเสมือนคือเพื่อให้แน่ใจว่ามีการใช้แพ็กเกจเวอร์ชันเฉพาะ หากคุณใช้>=แทน==จะไม่มีการรับประกันว่าคุณหรือบุคคลอื่นจะลงเอยด้วยเวอร์ชันเดียวกันหากต้องสร้างสภาพแวดล้อมใหม่สำหรับโปรเจ็กต์นั้น ใช้หมายเลขเวอร์ชันที่แน่นอน คุณอนาคตคุณและใครก็ตามที่มาหลังจากคุณจะขอบคุณ