pyenv คืออะไร? วิธีติดตั้งและจัดการหลายเวอร์ชันของ Python บน macOS และ Linux

目次

1. pyenv คืออะไร?

สำหรับนักพัฒนา Python มักจะพบว่ามีโปรเจกต์ต่าง ๆ ที่ต้องใช้เวอร์ชันของ Python ที่แตกต่างกัน ซึ่งในสถานการณ์นี้เครื่องมือที่มีประโยชน์คือ pyenv เครื่องมือนี้ช่วยจัดการหลายเวอร์ชันของ Python และสามารถสลับเวอร์ชันได้อย่างง่ายดายตามแต่ละโปรเจกต์

ความท้าทายในการจัดการเวอร์ชัน Python

เมื่อพัฒนาด้วย Python ไปเรื่อย ๆ อาจจำเป็นต้องใช้หลายเวอร์ชันของ Python ในโปรเจกต์ที่ต่างกัน ตัวอย่างเช่น โปรเจกต์หนึ่งใช้ Python 3.9 แต่โปรเจกต์อื่นอาจต้องใช้ Python 2.7 โดยปกติแล้ว ระบบมักจะติดตั้ง Python เพียงเวอร์ชันเดียว การสลับเวอร์ชันจึงยุ่งยาก pyenv ถูกออกแบบมาเพื่อแก้ปัญหานี้

ข้อดีของ pyenv

การใช้ pyenv มีประโยชน์ดังนี้:

  1. สลับเวอร์ชันได้ง่าย: ด้วย pyenv ผู้ใช้สามารถสลับเวอร์ชันของ Python ได้ทั้งในระดับระบบทั้งหมดหรือเฉพาะโปรเจกต์ได้ง่าย ๆ
  2. จัดการหลายเวอร์ชัน: สามารถจัดการหลายเวอร์ชันของ Python ที่ติดตั้งในระบบด้วยคำสั่งเดียว รองรับการทำงานกับ dependency และความแตกต่างของเวอร์ชันแต่ละโปรเจกต์ได้อย่างยืดหยุ่น
  3. รองรับหลายระบบปฏิบัติการ (ยกเว้น Windows): ใช้งานได้บน macOS และ Linux เป็นต้น

กลไกการทำงานของ pyenv

pyenv จะสร้างไดเรกทอรีแยกสำหรับแต่ละเวอร์ชันของ Python และติดตั้ง Python ไว้ในแต่ละไดเรกทอรี จากนั้นผู้ใช้สามารถใช้คำสั่ง pyenv global หรือ pyenv local เพื่อกำหนดเวอร์ชันที่ต้องการใช้ทั้งระบบหรือเฉพาะโปรเจกต์

2. วิธีติดตั้ง pyenv

ภาพรวม

ในการใช้งาน pyenv จำเป็นต้องติดตั้งลงในระบบก่อน ส่วนนี้จะอธิบายขั้นตอนการติดตั้งบน macOS และ Linux เนื่องจาก pyenv ไม่รองรับ Windows โดยตรง จึงแนะนำให้ใช้วิธีอื่นเช่น WSL หรือ Anaconda แทน

การติดตั้งบน macOS

บน macOS สามารถติดตั้ง pyenv ได้ง่าย ๆ ผ่าน Homebrew ซึ่งเป็นเครื่องมือจัดการแพ็กเกจสำหรับ macOS ช่วยให้ติดตั้งซอฟต์แวร์ต่าง ๆ ได้สะดวก ทำตามขั้นตอนดังนี้:

  1. ตรวจสอบการติดตั้ง Homebrew
    เปิด Terminal และรันคำสั่ง:
   brew --version

หากมีการแสดงหมายเลขเวอร์ชัน แสดงว่ามีการติดตั้งแล้ว หากยังไม่ได้ติดตั้งให้ไปที่ เว็บไซต์ทางการ Homebrew

  1. ติดตั้ง pyenv
    เมื่อมี Homebrew แล้ว ให้ติดตั้ง pyenv ด้วยคำสั่ง:
   brew install pyenv
  1. ตั้งค่าตัวแปรสภาพแวดล้อม
    เพิ่มค่าการตั้งค่าใน .bash_profile หรือ .zshrc:
   echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
   echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
   echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile

จากนั้นรีสตาร์ท Terminal หรือรัน:

   source ~/.bash_profile
  1. ตรวจสอบการติดตั้ง
    ทดสอบด้วยคำสั่ง:
   pyenv --version

การติดตั้งบน Linux

บน Linux วิธีติดตั้งใกล้เคียงกับ macOS แต่จะใช้ apt หรือ yum แทน ตัวอย่างใน Ubuntu:

  1. ติดตั้งแพ็กเกจที่จำเป็น
   sudo apt update
   sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev 
   libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev 
   xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
  1. ติดตั้ง pyenv
    ใช้ Git clone:
   curl https://pyenv.run | bash
  1. ตั้งค่าตัวแปรสภาพแวดล้อม
    เพิ่มลงใน .bashrc หรือ .zshrc:
   export PATH="$HOME/.pyenv/bin:$PATH"
   eval "$(pyenv init --path)"

จากนั้นรีสตาร์ท Terminal หรือรัน source ~/.bashrc

  1. ตรวจสอบการติดตั้ง
   pyenv --version

การแก้ปัญหาเบื้องต้น

หากเกิดข้อผิดพลาดระหว่างการติดตั้ง มักเกิดจาก library ที่ยังไม่ครบ โดยเฉพาะบน Linux อาจต้องติดตั้งเพิ่มตามคู่มืออย่างเป็นทางการ

侍エンジニア塾

3. การจัดการเวอร์ชัน Python

หลังจากติดตั้ง pyenv แล้ว ขั้นตอนต่อไปคือการเรียนรู้วิธีจัดการเวอร์ชันของ Python ส่วนนี้จะอธิบายการติดตั้งและการสลับเวอร์ชัน

การติดตั้งเวอร์ชัน Python

pyenv ช่วยให้ติดตั้งเวอร์ชันต่าง ๆ ของ Python ได้ง่าย ตัวอย่างเช่น หากโปรเจกต์ A ต้องใช้ Python 3.8 และโปรเจกต์ B ต้องใช้ Python 3.9 สามารถติดตั้งแยกกันได้ดังนี้:

  1. ตรวจสอบรายการเวอร์ชันที่มี
    ใช้คำสั่ง:
   pyenv install --list

คำสั่งนี้จะแสดงเวอร์ชัน Python ทั้งหมดที่สามารถติดตั้งได้

  1. ติดตั้งเวอร์ชันที่ต้องการ
    เช่น:
   pyenv install 3.9.1

การสลับเวอร์ชัน Python

pyenv ช่วยให้สลับใช้งานหลายเวอร์ชันของ Python ได้อย่างง่ายดาย เหมาะสำหรับโปรเจกต์ที่ต้องใช้เวอร์ชันต่างกัน

  1. สลับเวอร์ชันทั้งระบบ
    ใช้คำสั่ง:
   pyenv global 3.9.1

คำสั่งนี้จะตั้งค่าให้ระบบทั้งหมดใช้ Python 3.9.1

  1. สลับเวอร์ชันเฉพาะโปรเจกต์
    ใช้คำสั่ง:
   pyenv local 3.8.0

คำสั่งนี้จะทำให้โฟลเดอร์ปัจจุบันใช้ Python 3.8.0 โดยไม่กระทบโฟลเดอร์อื่น

  1. ตรวจสอบเวอร์ชันที่ใช้งานอยู่
    ใช้คำสั่ง:
   pyenv version

คำสั่งนี้จะแสดงเวอร์ชัน Python ที่กำลังถูกใช้งาน

การถอนการติดตั้งเวอร์ชัน

หากไม่ต้องการเวอร์ชันใด ๆ อีก สามารถลบออกได้ด้วย:

   pyenv uninstall 3.9.1

คำสั่งนี้จะลบ Python 3.9.1 ออกจากระบบ

4. การใช้งานร่วมกับ virtualenv

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

virtualenv คืออะไร?

virtualenv เป็นเครื่องมือที่ใช้สร้างสภาพแวดล้อมเสมือนสำหรับแต่ละโปรเจกต์ ทำให้สามารถแยกการพึ่งพาและแพ็กเกจต่าง ๆ ได้โดยไม่รบกวนกัน ตัวอย่างเช่น โปรเจกต์ A ใช้ requests เวอร์ชัน 2.0 ขณะที่โปรเจกต์ B ใช้เวอร์ชัน 3.0 ทั้งสองโปรเจกต์สามารถทำงานร่วมกันได้โดยไม่มีปัญหา

ความแตกต่างระหว่าง pyenv และ virtualenv

pyenv: เน้นที่การจัดการเวอร์ชันของ Python
virtualenv: เน้นที่การจัดการแพ็กเกจและไลบรารี แยกตามโปรเจกต์

เมื่อใช้ร่วมกัน จะได้ข้อดีดังนี้:

  • จัดการหลายเวอร์ชันของ Python: ใช้ pyenv เพื่อติดตั้งและกำหนดเวอร์ชันที่เหมาะสมในแต่ละโปรเจกต์
  • จัดการ dependencies แยกตามโปรเจกต์: ใช้ virtualenv เพื่อป้องกันการชนกันของแพ็กเกจ

การติดตั้ง pyenv-virtualenv

สามารถติดตั้งปลั๊กอิน pyenv-virtualenv เพื่อทำให้จัดการสภาพแวดล้อมได้ง่ายขึ้น:

  1. ติดตั้ง
    บน macOS ใช้:
   brew install pyenv-virtualenv

บน Linux ใช้:

   git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
  1. ตั้งค่าตัวแปรสภาพแวดล้อม
    เพิ่มบรรทัดนี้ในไฟล์ .bash_profile หรือ .zshrc:
   echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
   source ~/.bash_profile

การสร้างสภาพแวดล้อมเสมือน

ตัวอย่างการสร้าง virtualenv สำหรับ Python 3.8.0:

pyenv virtualenv 3.8.0 my_project_env

คำสั่งนี้จะสร้างสภาพแวดล้อมชื่อ my_project_env

การสลับสภาพแวดล้อม

ใช้คำสั่งนี้เพื่อเปิดใช้งานในโปรเจกต์:

pyenv local my_project_env

การลบสภาพแวดล้อม

หากไม่ต้องการใช้งานแล้ว สามารถลบได้ด้วย:

pyenv uninstall my_project_env

ข้อดีของ virtualenv

การใช้ pyenv ร่วมกับ virtualenv ทำให้สามารถแยกเวอร์ชัน Python และ dependencies ของแต่ละโปรเจกต์ได้อย่างอิสระ ลดปัญหาการชนกันของแพ็กเกจ และทำให้การพัฒนาเสถียรขึ้น

年収訴求

5. ข้อควรระวังในการใช้ pyenv

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

1. การรองรับบน Windows มีข้อจำกัด

pyenv ถูกออกแบบมาสำหรับ macOS และ Linux โดยตรง บน Windows จึงมีข้อจำกัด วิธีแก้ไขที่ใช้ได้คือ:

  • ใช้ WSL (Windows Subsystem for Linux): ติดตั้ง Linux บน Windows ผ่าน WSL แล้วจึงใช้งาน pyenv
  • ใช้ Anaconda: เป็นอีกทางเลือกในการจัดการหลายเวอร์ชันของ Python และสภาพแวดล้อมเสมือน

2. ขาด dependencies ที่จำเป็น

บน Linux หาก dependencies ไม่ครบ อาจเกิด error เช่น:

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?

วิธีแก้ไข:

  • ติดตั้งแพ็กเกจที่จำเป็น เช่น libbz2-dev, libssl-dev แล้วลองติดตั้งใหม่อีกครั้ง
   sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev

3. ความขัดแย้งกับ Python ที่มีอยู่เดิม

หากในระบบมี Python ที่ติดตั้งอยู่แล้ว อาจเกิดการชนกับที่ pyenv จัดการ วิธีแก้คือ:

  • ตรวจสอบไฟล์ตั้งค่าเช่น .bashrc หรือ .zshrc ว่ามีบรรทัด:
   export PATH="$HOME/.pyenv/bin:$PATH"
   eval "$(pyenv init --path)"

แล้วรีสตาร์ท Terminal หรือรัน source ~/.bashrc

4. การติดตั้งบางเวอร์ชันล้มเหลว

อาจเกิดขึ้นหากเครื่องขาด build tools หรือ library วิธีแก้คือ ติดตั้ง build-essential, libssl-dev เป็นต้น แล้วลองใหม่

5. กำหนดเวอร์ชันผิดพลาด

หากใส่หมายเลขเวอร์ชันไม่ถูกต้อง จะเกิด error ควรตรวจสอบเวอร์ชันที่มีด้วยคำสั่ง:

   pyenv install --list

6. ความขัดแย้งของสภาพแวดล้อมเสมือน

หากมีหลาย virtualenv ที่ใช้ Python เวอร์ชันเดียวกัน อาจเกิดการชนกันของ dependencies วิธีแก้คือสร้าง virtualenv แยกสำหรับแต่ละโปรเจกต์เสมอ โดยใช้ virtualenv หรือ pyenv-virtualenv

6. สรุปและขั้นตอนถัดไป

pyenv เป็นเครื่องมือที่ทรงพลังและสะดวกสำหรับการจัดการเวอร์ชันของ Python โดยเฉพาะสำหรับนักพัฒนาที่ต้องใช้หลายเวอร์ชันในโปรเจกต์ต่าง ๆ การใช้ pyenv ทำให้การสลับเวอร์ชันเป็นเรื่องง่าย และเมื่อใช้งานร่วมกับ virtualenv ก็ช่วยให้จัดการ dependencies ของแต่ละโปรเจกต์ได้สะดวกและปลอดภัยมากขึ้น

สรุปข้อดีของ pyenv

  1. จัดการเวอร์ชันได้ง่าย: สลับหลายเวอร์ชันของ Python ได้ทั้งในระดับระบบและโปรเจกต์
  2. ใช้งานร่วมกับ virtualenv: ช่วยแยก dependencies ของแต่ละโปรเจกต์ได้อย่างอิสระ
  3. แก้ปัญหาได้ยืดหยุ่น: หากเกิด error หรือการชนกันของเวอร์ชัน สามารถปรับการตั้งค่าและแก้ไขได้ง่าย

ขั้นตอนถัดไป

  1. พัฒนา workflow ให้มีประสิทธิภาพมากขึ้น: หลังจากคุ้นเคยกับ pyenv แล้ว ลองใช้งานร่วมกับเครื่องมืออื่น เช่น pipenv หรือ poetry เพื่อจัดการ dependencies และการ setup โปรเจกต์ให้อัตโนมัติ
  2. ขยายไปยังสภาพแวดล้อมอื่น: หากเป็นผู้ใช้ Windows ให้พิจารณา WSL หรือ Anaconda เพื่อรองรับการทำงานที่คล้าย Linux
  3. ทดลองกับโปรเจกต์จริง: ไม่เพียงแค่เรียนรู้เชิงทฤษฎี แต่ควรนำ pyenv ไปใช้จริงกับโปรเจกต์ เพื่อเห็นผลลัพธ์ในการแยกเวอร์ชันและจัดการสภาพแวดล้อม
オープンソースの力を活用する方法~Ubuntuの世界へようこそ~

目次 1 1. はじめに1.1 Pythonバージョン管理の重要性1.2 Ubuntuとpyenvの組み合わせの利点2 …