- ช่วยให้สลับใช้งานระหว่าง Python หลายเวอร์ชันได้อย่างง่ายดาย
- เรียบง่าย ไม่รบกวนการทำงาน และยึดตามแนวทางเครื่องมือแบบดั้งเดิมของ UNIX ที่มีจุดประสงค์เดียวแต่ทำงานได้ดี
- โปรเจ็กต์นี้แตกแขนงมาจาก rbenv และ ruby-build แล้วปรับให้เหมาะกับ Python
pyenv ทำอะไรได้บ้าง
- เปลี่ยน เวอร์ชัน Python แบบ global ได้ในระดับผู้ใช้
- รองรับ เวอร์ชัน Python รายโปรเจ็กต์
- override เวอร์ชัน Python ได้ด้วย environment variable
- ค้นหา คำสั่ง Python หลายเวอร์ชัน ได้พร้อมกัน มีประโยชน์สำหรับการทดสอบข้ามเวอร์ชันด้วย tox
สิ่งที่ pyenv ไม่ได้ทำ...
- ไม่พึ่งพา Python เอง pyenv ถูกสร้างด้วยเชลล์สคริปต์ล้วน
- ไม่จำเป็นต้องโหลด เข้าเชลล์ โดยใช้แนวทาง shim ผ่านการเพิ่มไดเรกทอรีลงใน
PATH แทน
- ไม่จัดการ virtualenv โดยตรง แน่นอนว่าผู้ใช้สามารถสร้าง virtualenv เองหรือใช้ pyenv-virtualenv เพื่อทำให้เป็นอัตโนมัติได้
หลักการทำงาน
- pyenv ใช้ไฟล์สั่งรัน shim ที่ถูกแทรกเข้าไปใน
PATH เพื่อดักจับคำสั่ง Python จากนั้นจะตัดสินใจเลือกเวอร์ชัน Python ที่แอปพลิเคชันระบุ แล้วส่งคำสั่งต่อไปยัง Python ที่ติดตั้งไว้ตามนั้น
ทำความเข้าใจ PATH
- เมื่อรันคำสั่งอย่าง
python หรือ pip ระบบปฏิบัติการจะค้นหาไฟล์สั่งรันตามชื่อนั้นในรายการไดเรกทอรีที่อยู่ใน environment variable PATH
ทำความเข้าใจ Shims
- pyenv จะแทรกไดเรกทอรี shims ไว้ด้านหน้าสุดของ
PATH ผ่านกระบวนการ rehashing เพื่อคง shim สำหรับทุกคำสั่ง Python ของทุกเวอร์ชัน Python ที่ติดตั้งไว้
ทำความเข้าใจการเลือกเวอร์ชัน Python
- เมื่อมีการรัน shim, pyenv จะอ่านและใช้เวอร์ชัน Python จากแหล่งต่อไปนี้ตามลำดับ:
- environment variable
PYENV_VERSION (ถ้ากำหนดไว้)
- ไฟล์
.python-version สำหรับแอปพลิเคชันในไดเรกทอรีปัจจุบัน (ถ้ามี)
- ไฟล์
.python-version แรกที่พบจากการค้นหาในไดเรกทอรีแม่ขึ้นไปเรื่อย ๆ จนถึง root ของไฟล์ระบบ (ถ้ามี)
- ไฟล์ global
$(pyenv root)/version
การค้นหาตำแหน่งติดตั้ง Python ที่ pyenv จัดเตรียมไว้
- pyenv จะส่งคำสั่งไปยัง Python ที่ติดตั้งไว้ตามเวอร์ชัน Python ที่มันตัดสินใจเลือก
- Python แต่ละเวอร์ชันจะถูกติดตั้งอยู่ในไดเรกทอรีของตัวเองภายใต้
$(pyenv root)/versions
วิธีใช้งาน
ติดตั้ง Python เวอร์ชันเพิ่มเติม
- ใช้
pyenv install เพื่อติดตั้ง Python เวอร์ชันเพิ่มเติม
resolve เป็นเวอร์ชันล่าสุดโดยอัตโนมัติ
- ทุกคำสั่งย่อยของ Pyenv ยกเว้น
uninstall จะ resolve prefix แบบเต็มเป็นเวอร์ชันล่าสุดโดยอัตโนมัติ
เวอร์ชัน Python ที่มีการรองรับเพิ่มเติม
- มี Python release บางตัวที่ใช้แพตช์จากผู้ใช้เพื่อเพิ่มการรองรับในบางสภาพแวดล้อม
สลับระหว่างเวอร์ชัน Python
- หากต้องการใช้ Python ที่ Pyenv ติดตั้งไว้ ให้รันคำสั่งใดคำสั่งหนึ่งต่อไปนี้:
pyenv shell
pyenv local
pyenv global
ลบเวอร์ชัน Python
- เมื่อเวลาผ่านไป เวอร์ชัน Python จะสะสมอยู่ในไดเรกทอรี
$(pyenv root)/versions
- หากต้องการลบเวอร์ชัน Python เก่า ให้ใช้
pyenv uninstall
งานอื่น ๆ
- หากต้องการดูรายการคำสั่งย่อยทั้งหมดที่มี ให้รัน
pyenv commands
การลบ pyenv
- สามารถปิดใช้งาน Pyenv ชั่วคราวหรือลบออกจากระบบได้อย่างง่ายดาย
ปลั๊กอินของ Pyenv
- สามารถใช้ปลั๊กอินเพื่อขยายและปรับแต่งความสามารถของ Pyenv ได้ในแบบที่เรียบง่าย ยืดหยุ่น และดูแลรักษาได้
การตั้งค่าขั้นสูง
- มี environment variable สำหรับควบคุมพฤติกรรมของ Pyenv
การพัฒนา
- ซอร์สโค้ดของ Pyenv โฮสต์อยู่บน GitHub
- รันทดสอบด้วย Bats
ความเห็นของ GN⁺
- pyenv เป็นเครื่องมือที่มีประโยชน์มากสำหรับการจัดการ Python หลายเวอร์ชัน โดยเฉพาะสำหรับนักพัฒนาที่ต้องใช้ Python คนละเวอร์ชันในหลายโปรเจ็กต์
- เครื่องมือนี้ไม่พึ่งพา Python เองและประกอบด้วยเชลล์สคริปต์ล้วน จึงสามารถติดตั้งและจัดการได้แม้ในระบบที่ยังไม่ได้ติดตั้ง Python
- แม้ pyenv จะไม่จัดการ virtualenv โดยตรง แต่สามารถทำให้การจัดการ virtualenv เป็นอัตโนมัติได้ผ่านปลั๊กอิน pyenv-virtualenv ซึ่งสะดวกมาก
- เนื่องจากการติดตั้งและการใช้งานค่อนข้างง่าย วิศวกรซอฟต์แวร์ระดับเริ่มต้นที่ต้องการจัดการเวอร์ชัน Python ก็เข้าถึงได้ไม่ยาก
- เครื่องมืออื่นที่มีความสามารถคล้าย pyenv คือ
conda ซึ่งถูกใช้อย่างแพร่หลายในด้าน data science และ machine learning โดย conda มีทั้งการจัดการแพ็กเกจและ environment จึงเหมาะกับผู้ใช้ที่ต้องการความสามารถเหล่านี้
- เมื่อนำ pyenv มาใช้ ควรระวังหากในระบบมี Python ติดตั้งไว้หลายเวอร์ชันอยู่แล้ว เพื่อหลีกเลี่ยงปัญหาการชนกันของ path แม้ว่าข้อดีของ pyenv คือช่วยให้จัดการเวอร์ชันได้ง่ายขึ้น แต่การตั้งค่าที่ผิดพลาดอาจรบกวน path ของ Python พื้นฐานในระบบได้
7 ความคิดเห็น
สำหรับ
condaต้องระวังว่าในองค์กรที่มีขนาดถึงระดับหนึ่งจะเป็นแบบมีค่าใช้จ่าย
ต่อให้บริษัทเล็ก แต่ถ้าบริษัทต้นสังกัดหลักมีขนาดใหญ่ ก็ลำบากที่จะส่งมอบงาน
ตัว conda เองใช้ฟรีภายใต้ BSD แต่ควรตรวจสอบไลเซนส์ของรีโพซิทอรีและแพ็กเกจให้ดีนะครับ
ผมตั้ง
asdfไว้เป็นตัวหลักที่ระดับบนสุด https://asdf-vm.com/ส่วนแยกตามแต่ละโปรเจกต์ก็มีทั้งตั้งค่าแบบ local บ้าง แล้วก็ใช้คอนเทนเนอร์บ้าง...
ช่วงนี้มีเครื่องมือสำหรับตั้งค่าสภาพแวดล้อมใหม่ + จัดการมันออกมาเยอะมาก เลยแทบไม่ได้ใช้อยู่เหมือนกันครับ.. 5555
ผมก็ใช้แบบนั้นเป๊ะเลย
ฮ่าๆๆ ส่วนตัวผมรู้สึกว่า
pyenvมันเริ่มดูค่อนข้างเชยไปหน่อยแล้วพอมีพวก rbenv, pyenv, nodenv โผล่มาเรื่อย ๆ สุดท้ายก็เลยมี anyenv เกิดขึ้นมาจนได้ 555
https://github.com/anyenv/anyenv
ความคิดเห็นจาก Hacker News
คำเตือนเกี่ยวกับการใช้ pyenv
ความทุกข์ของโปรแกรมเมอร์ Python
เครื่องมือสำหรับทำให้โปรแกรม Python เสถียร
แนะนำเครื่องมือ Mise
ข้อดีของ ASDF
แชร์ประสบการณ์การใช้ pyenv
python<version> -m venv /my/virtual/envมีความเสถียรกว่าสแตกการจัดการ Python ส่วนตัว
การจัดการ runtime dependency ด้วย Mise
แชร์เวิร์กโฟลว์บน macOS
ตรงนี้ดูเหมือนจะเป็นจุดที่ทรมานมากจริง ๆ