φυβλαςのβλογ
บล็อกของ phyblas



การใช้ pip เพื่อติดตั้งแพ็กเกจเสริมใน python
เขียนเมื่อ 2019/01/14 12:53
แก้ไขล่าสุด 2024/02/22 10:50
ในการใช้ภาษาไพธอน นอกจากมอดูลมาตรฐานที่มีอยู่แต่แรกแล้ว บ่อยครั้งจำเป็นต้องติดตั้งมอดูลเสริม (แพ็กเกจเสริม) เพิ่มเติมที่จำเพาะสำหรับงานที่ต้องการ

วิธีการลงมอดูลใหม่นั้นมีหลายวิธีด้วยกัน แต่ที่นิยมมากที่สุดคือใช้ pip

แค่เข้าคอมมานด์ไลน์แล้วพิมพ์
pip install ชื่อแพ็กเกจ

เท่านี้แพ็กเกจของมอดูลที่ต้องการก็จะถูกติดตั้งลงเครื่อง (ถ้าไม่ติดปัญหาอะไรบางอย่าง)

pip มีประโยชน์มากสำหรับคนที่เขียนไพธอน เอาไว้ใช้คลุมหัวเวลาที่อายได้ด้วย... นั่นมันปี๊บ

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

สารบัญ



การติดตั้ง pip

pip ไม่ใช่ส่วนประกอบหนึ่งที่ติดมากับไพธอนมาตรฐาน ดังนั้นถ้าลงไพธอนจากเว็บหลัก https://www.python.org/downloads จะยังไม่มี pip อยู่ด้วย

สำหรับใน mac หรือ linux ปกติจะมีไพธอนติดมาในเครื่องตั้งแต่ต้น แต่ก็มักจะไม่ได้มี pip ให้

เพียงแต่โดยปกติถ้าติดตั้งไพธอนด้วยแพ็กเกจสำเร็จรูปอย่าง anaconda หรือ canopy ก็จะมี pip ติดมาอยู่แล้วจึงไม่ต้องห่วงเรื่องการติดตั้ง ใช้งานได้เลย ที่จริงจึงแล้วค่อนข้างแนะนำให้ใช้พวกนี้มากกว่า

สำหรับคนที่ไม่ได้ลงแพ็กเกจสำเร็จรูปก็ยังมีวิธีติดตั้ง pip อีกหลายวิธี ที่จะแนะนำต่อไปนี้เป็นแค่ส่วนนึง

การติดตั้งสำหรับใน windows ให้โหลด https://bootstrap.pypa.io/get-pip.py

หรือถ้าลิงก์ใช้ไม่ได้แล้วก็ให้ค้นคำว่า get-pip py ใน google ก็จะเจอได้

เมื่อโหลดไฟล์มาแล้วก็เปิดคอมมานด์ไลน์ขึ้นมาแล้วไปที่โฟลเดอร์ที่โหลดไฟล์มาแล้วสั่ง
python get-pip.py

กรณีที่ลงไพธอนไว้หลายตัวในเครื่อง pip จะไปถูกติดตั้งอยู่ในไพธอนตัวไหนก็ขึ้นอยู่กับว่ารันด้วยไพธอนตัวไหน

คำสั่ง python เป็นการไปรันไพธอนตัวไหนนั้นขึ้นอยู่กับตัวแปรสภาพแวดล้อม (environment variable)

สำหรับใน mac ก็ใช้วิธีเดียวกัน แต่ถ้าจะติดตั้งในไพธอนที่ติดมากับระบบอยู่แล้วจำเป็นต้องใช้ sudo
sudo python get-pip.py

เพียงแต่ไพธอนที่ติดมากับ mac นั้นมักจะมี easy_install ติดมาด้วย จึงอาจใช้ easy_install เพื่อติดตั้ง pip ได้เลย
sudo easy_install pip

สำหรับใน linux สามารถใช้คำสั่ง apt-get หรือ yum ได้
sudo apt-get install python3-pip # สำหรับ ubuntu, debian
sudo yum install python3-pip # สำหรับ centOS, fedora



ติดตั้งแพ็กเกจด้วย pip install

คำสั่งพื้นฐานที่สุดของ pip ก็คือ pip install เมื่อต้องการมอดูลอะไรก็แค่พิมพ์ pip install ตามด้วยชื่อ เช่น
pip install piexif

แค่นี้ก็ติดตั้งได้สำเร็จ
Collecting piexif
  Downloading https://files.pythonhosted.org/packages/d9/45/19726eac3f8ddedccff86de92fa6d16d90b0e9257df811b7331f0b91d966/piexif-1.1.2-py2.py3-none-any.whl
Installing collected packages: piexif
Successfully installed piexif-1.1.2

เวลาลงถ้าแค่ใส่ชื่อแพ็กเกจแต่ไม่ได้ระบุเวอร์ชันจะได้เวอร์ชันล่าสุด แต่หากต้องการเวอร์ชันเก่ากว่านั้นก็สามารถระบุเวอร์ชันที่ต้องการได้ เช่น
pip install piexif==1.0.0

คำสั่ง pip install นั้นไม่ใช่แค่ใช้ลงมอดูลเพิ่มแต่ยังใช้อัปเวอร์ชันได้ด้วย การอัปเวอร์ชันให้ใส่ -U หรือ --upgrade นำหน้าชื่อแพ็กเกจ
pip install -U piexif

เท่านี้ก็จะกลายเป็นเวอร์ชันใหม่
Collecting piexif
  Downloading https://files.pythonhosted.org/packages/d9/45/19726eac3f8ddedccff86de92fa6d16d90b0e9257df811b7331f0b91d966/piexif-1.1.2-py2.py3-none-any.whl
Installing collected packages: piexif
  Found existing installation: piexif 1.0.0
    Uninstalling piexif-1.0.0:
      Successfully uninstalled piexif-1.0.0
Successfully installed piexif-1.1.2

ปกติถ้าหากแพ็กเกจต้องการที่จะลงมีอยู่แล้วพอสั่ง pip install ไปก็จะขึ้นแบบนี้
Requirement already satisfied: piexif in /anaconda3/lib/python3.7/site-packages (1.1.2)

แต่ถ้าหากต้องการบังคับให้ลงใหม่โดยไม่สนว่าจะมีอยู่แล้วหรือเปล่าก็ให้ใช้ --force-reinstall หรือ -I หรือ --ignore-installed
pip install piexif --force-reinstall

ปกติแล้วแพ็กเกจจะถูกนำไปเก็บไว้ในโฟลเดอร์ site-packages ที่เก็บรวมแพ็กเกจที่ใช้สำหรับไพธอนตัวที่ลงไว้ในเครื่อง

แต่ในบางครั้งถ้าไพธอนถูกลงไว้ในส่วนกลาง แต่เราต้องการลงแพ็กเกจใหม่เพื่อใช้อยู่คนเดียว หรือไม่มีสิทธิ์ sudo ทำให้ไม่สามารถลงได้ กรณีแบบนั้นให้ใส่ --user
pip install piexif --user

แบบนี้แพ็กเกจจะไปเก็บอยู่ในโฟลเดอร์บ้านของผู้ใช้คนนั้นเอง เช่นใน mac จะไปถูกเก็บอยู่ใน /Users/ชื่อผู้ใช้/.local/lib เป็นต้น



ลงพร้อมกันหลายตัว

ปกติแล้วถ้าใส่ชื่อแพ็กเกจซ้อนกันหลายๆตัวจะเป็นการลงหลายๆตัวต่อกันไป
pip install piexif imageio scikit-image

แต่บางทีถ้าเราต้องการลงหลายแพ็กเกจในเวลาเดียวกันอาจไม่สะดวกที่จะพิมพ์ทั้งหมด แบบนี้อาจเขียนชื่อทั้งหมดใส่ไฟล์ โดยเว้นบรรทัดละชื่อ แล้วใส่ -r แล้วตามด้วยชื่อไฟล์นั้น แบบนี้ก็จะเป็นการติดตั้งทั้งหมดที่มีชื่ออยู่
pip install -r r.txt



ใช้ --no-chache-dir

ปกติแพ็กเกจเวลาติดตั้งด้วย pip จะเริ่มจากการโหลดไฟล์ที่เกี่ยวข้อง แล้วไฟล์นั้นจึงถูกนำมารันเพื่อติดตั้งลงเครื่อง

ปกติไฟล์ที่โหลดนั้นจะถูกเก็บเอาไว้ เพื่อที่ถ้ามีความจำเป็นต้องเรียกใช้อีกจะได้ไม่ต้องโหลดใหม่

สถานที่เก็บจะต่างกันไป ขึ้นกับระบบปฏิบัติการ
- ใน windows อยู่ใน โฟลเดอร์ที่ลงไว้\pip\Cache
- ใน mac อยู่ใน Users/ชื่อผู้ใช้/Library/Caches/pip
- ใน linux อยู่ใน home/ชื่อผู้ใช้/.cache/pip

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

ถ้าต้องการไม่ให้เก็บไฟล์เอาให้ใส่ --no-cache-dir
pip install piexif --no-chache-dir



pip uninstall

ถ้าไม่ต้องการแล้วจะเอาออกก็ pip uninstall เช่น
pip uninstall piexif

แล้วก็จะมีการถามยืนยัน พอกด y ไปแพ็กเกจก็จะถูกเอาออกเรียบร้อย
Uninstalling piexif-1.1.2:
  Would remove:
    /anaconda3/lib/python3.7/site-packages/piexif-1.1.2.dist-info/*
    /anaconda3/lib/python3.7/site-packages/piexif/*
Proceed (y/n)? y
  Successfully uninstalled piexif-1.1.2

ปกติแล้วเวลา uninstall จะมีการถามเพื่อความแน่ใจก่อนว่าจะลบหรือไม่ แต่ถ้าอยากให้ลบไปเลยไม่ต้องมากดยืนยันให้เสียเวลาให้ใส่ -y
pip uninstall -y piexif

แบบนี้ก็จะเป็นการเอาออกทันที
Uninstalling piexif-1.1.2:
  Successfully uninstalled piexif-1.1.2



นอกจากนี้ หากมีหลายตัวที่ต้องการเอาออก ก็ใส่หลายตัวเรียงกันได้ หรือจะใช้ -r เพื่ออ่านจากไฟล์ก็ได้เช่นเดียวกับตอนลง
pip uninstall -r r.txt



โหลดแพ็กเกจด้วย pip download

นอกจากจะสั่ง pip install เพื่อลงทันทีแล้ว ถ้าแค่ต้องการโหลดตัวแพ็กเกจมาไว้ในเครื่องก็อาจใช้คำสั่ง pip download เช่น
pip download piexif

ก็จะได้ไฟล์มาโหลดเก็บไว้
Collecting piexif
  Downloading https://files.pythonhosted.org/packages/d9/45/19726eac3f8ddedccff86de92fa6d16d90b0e9257df811b7331f0b91d966/piexif-1.1.2-py2.py3-none-any.whl
  Saved ./piexif-1.1.2-py2.py3-none-any.whl
Successfully downloaded piexif

ไฟล์นี้สามารถนำมาใช้เพื่อติดตั้งในภายหลังได้ วิธีการก็ใช้ pip install ตามด้วยชื่อไฟล์
pip install piexif-1.1.2-py2.py3-none-any.whl



แสดงรายชื่อแพ็กเกจที่ลงไว้ โดยใช้ pip list หรือ pip freeze

หากต้องการให้แสดงรายชื่อของแพ็กเกจที่ลงก็สั่ง
pip list

ได้
Package                            Version
---------------------------------- ----------
alabaster                          0.7.11
anaconda-client                    1.7.2
anaconda-navigator                 1.9.4
ฯลฯ

ถ้าต้องการให้แสดงเฉพาะแพ็กเกจที่อัปยังไม่ถึงล่าสุดให้ใช้ -o หรือ --outdated
pip list -o

ได้
Package            Version Latest  Type
------------------ ------- ------- -----
alabaster          0.7.11  0.7.12  wheel
astroid            2.0.4   2.1.0   wheel
astropy            3.0.4   3.1.1   wheel
ฯลฯ

ในทางกลับกัน ถ้าต้องการให้แสดงแค่ตัวที่เป็นเวอร์ชันล่าสุดอยู่แล้วให้ใช้ -u หรือ --uptodate
pip list -u

นอกจากนี้ยังมีคำสั่ง freeze สามารถแสดงแพ็กเกจที่ลงไว้ได้เหมือนกันแต่จะแสดงผลต่างกัน
pip freeze

ได้ผลเป็นแบบนี้
alabaster==0.7.11
anaconda-client==1.7.2
anaconda-navigator==1.9.4
ฯลฯ

การแสดงในรูปแบบนี้มีประโยชน์ตรงที่ว่า ถ้าหากนำมาบันทึกใส่ไฟล์ไว้ ไฟล์นั้นจะนำไปใช้สำหรับติดตั้งด้วยคำสั่ง pip install -r ได้ทันที จึงเหมาะกับเวลาต้องการอพยพย้ายเครื่องแล้วไม่ต้องมาจำว่าลงอะไรไปบ้าง

หากเขียน > แล้วตามด้วยชื่อไฟล์แบบนี้ก็จะเป็นการบันทึกลงไฟล์ได้ทันที
pip freeze > r.txt



ค้นหาแพ็กเกจที่ต้องการด้วย pip search

สามารถค้นหาแพ็กเกจที่ต้องการได้จากชื่อแพ็กเกจด้วย pip search แล้วจะได้รายชื่อแพ็กเกจที่เกี่ยวข้องมา
pip search piexif

ได้
piexif (1.1.2)    - To simplify exif manipulations with python. Writing,
                    reading, and more...
  INSTALLED: 1.1.2 (latest)
GPSPhoto (2.2.2)  - Returns, Modifies, or Removes GPS Data from Exif Data in
                    jpeg and tiff photos. Requires ExifRead, piexif, and PIL.



แสดงรายละเอียดของแพ็กเกจด้วย pip show

คำสั่ง pip show ใช้แสดงรายละเอียดของแพ็กเกจที่ลงไว้ได้
pip show piexif

ได้
Name: piexif
Version: 1.1.2
Summary: To simplify exif manipulations with python. Writing, reading, and more...
Home-page: https://github.com/hMatoba/Piexif
Author: hMatoba
Author-email: hiroaki.mtb@outlook.com
License: MIT
Location: /anaconda3/lib/python3.7/site-packages
Requires:
Required-by:

ถ้าเติม -f หรือ --files จะแสดงรายชื่อไฟล์ทั้งหมดที่ลงอยู่ในแพ็กเกจนั้น
pip show -f piexif



import pip

อันที่จริง pip เองก็เป็นมอดูลหนึ่งใน python ด้วย สามารถลองเรียกใช้ได้ เพียงแต่ก็มักไม่ได้ใช้ทำอะไรมาก

ตัวอย่างเช่น
import pip
print(pip.__version__) # ได้ 18.1



ข้อความที่ขึ้นระหว่างทำคำสั่ง

ปกติเวลาติดตั้งแพ็กเกจหรือทำอะไรจะเห็นขึ้นคำอธิบายมาประมาณนึง แต่ถ้าอยากให้อธิบายเหตุการณ์ทั้งหมดอย่าละเอียดยิบอาจใส่ -v หรือ --verbose
pip install piexif -v

ในทางกลับกันถ้าไม่ต้องการให้ขึ้นข้อความอะไรเลยให้ใช้ -q หรือ --quiet แต่แบบนี้แพ็กเกจลงสำเร็จหรือมีปัญหาอะไรตรงไหนก็จะไม่อาจรู้ได้เลย
pip install piexif -q

ถ้าต้องการบันทึกข้อความที่แสดงทั้งหมดไว้ในไฟล์ก็อาจใส่ --log
pip install piexif --log log.txt



ตรวจดูเวอร์ชัน

หากต้องการดูเวอร์ชันของ pip ที่ลงอยู่ให้พิมพ์ -V หรือ --version
pip -V

ได้
pip 18.1 from /anaconda3/lib/python3.7/site-packages/pip (python 3.7)



หาข้อมูลเพิ่มเติม

สุดท้าย ถ้าต้องการข้อมูลเพิ่มเติมให้พิมพ์ help หรือ -h หรือ --help จะบอกข้อมูลการใช้
pip -h

และถ้าใส่ชื่อคำสั่งไปด้วยจะได้รายละเอียดของคำสั่งนั้นๆ
pip list -h



การอัปแพ็กเกจทั้งหมดเป็นเวอร์ชันล่าสุด

pip ไม่ได้เตรียมคำสั่งสำเร็จรูปสำหรับทำให้แพ็กเกจเป็นเวอร์ชั้นล่าสุดทั้งหมดได้ในทันที

แต่เราสามารถใช้คำสั่ง pip list -o เพื่อไล่รายชื่อแพ็กเกจที่ยังไม่ใช่เวอร์ชันล่าสุด จากนั้นสั่ง pip install -U ได้

ทั้งหมดนี้สามารถทำโดยอัตโนมัติด้วยวิธีต่างๆ จะเขียนคำสั่งซ้อนกันในเชลก็ได้ หรืออาจใช้ไพธอน โดยเรียกคำสั่งในเชลด้วย subprocess.check_output
import subprocess
lispip = subprocess.check_output('pip list -o',shell=1).decode('utf-8').strip().split('\n')
for p in lispip[2:]:
    p = p.split(' ')[0]
    try:
        print(subprocess.check_output('pip install -U %s'%p,shell=1).decode('utf-8'))
    except: # บางแพ็กเกจอาจมีปัญหา
        print('%s: เกิดข้อผิดพลาด'%p)


ทั้งหมดนี้เป็นส่วนหนึ่งของวิธีการใช้ pip

รายละเอียดจริงๆยังมีอีกมากมาย สามารถไปอ่านเพิ่มเติมกันได้



นอกจาก pip แล้วก็ยังมีของอีกอย่างที่ใช้ลงแพ็กเกจได้คล้ายๆกันคือ conda อ่านรายละเอียดได้ใน https://phyblas.hinaboshi.com/20190118



อ้างอิง


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python
-- คอมพิวเตอร์ >> shell

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文