# pip install package

## การใช้ pip เพื่อติดตั้งแพ็กเกจเสริมใน python

ในการใช้ภาษาไพธอน นอกจากมอดูลมาตรฐานที่มีอยู่แต่แรกแล้ว บ่อยครั้งจำเป็นต้องติดตั้งมอดูลเสริม (แพ็กเกจเสริม) เพิ่มเติมที่จำเพาะสำหรับงานที่ต้องการ วิธีการลงมอดูลใหม่นั้นมีหลายวิธีด้วยกัน แต่ที่นิยมมากที่สุดคือใช้ `pip` แค่เข้าคอมมานด์ไลน์แล้วพิมพ์

```
pip install ชื่อแพ็กเกจ
```

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

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

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

**สารบัญ**

* การติดตั้ง pip &#x20;
* ลงแพ็กเกจใหม่ &#x20;
* \--no-cache-dir &#x20;
* เอาแพ็กเกจออก &#x20;
* โหลดเก็บไว้ &#x20;
* แสดงรายการ &#x20;
* ค้นหา &#x20;
* แสดงรายละเอียด &#x20;
* ปรับข้อความที่แสดง &#x20;
* ดูเวอร์ชัน pip &#x20;
* หาข้อมูลเพิ่มเติม &#x20;
* อัปเวอร์ชันทั้งหมด

**การติดตั้ง pip**

pip ไม่ใช่ส่วนประกอบหนึ่งที่ติดมากับไพธอนมาตรฐาน ดังนั้นถ้าลงไพธอนจากเว็บหลัก [https://www.python.org/downloads](https://www.python.org/downloads) จะยังไม่มี pip อยู่ด้วย สำหรับใน mac หรือ linux ปกติจะมีไพธอนติดมาในเครื่องตั้งแต่ต้น แต่ก็มักจะไม่ได้มี pip ให้ เพียงแต่โดยปกติถ้าติดตั้งไพธอนด้วยแพ็กเกจสำเร็จรูปอย่าง anaconda หรือ canopy ก็จะมี pip ติดมาอยู่แล้วจึงไม่ต้องห่วงเรื่องการติดตั้ง ใช้งานได้เลย ที่จริงจึงแล้วค่อนข้างแนะนำให้ใช้พวกนี้มากกว่า

สำหรับคนที่ไม่ได้ลงแพ็กเกจสำเร็จรูปก็ยังมีวิธีติดตั้ง pip อีกหลายวิธี ที่จะแนะนำต่อไปนี้เป็นแค่ส่วนนึง การติดตั้งสำหรับใน windows ให้โหลด [https://bootstrap.pypa.io/get-pip.py](https://bootstrap.pypa.io/get-pip.py) หรือถ้าลิงก์ใช้ไม่ได้แล้วก็ให้ค้นคำว่า get-pip py ใน google ก็จะเจอได้

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

```
python get-pip.py
```

กรณีที่ลงไพธอนไว้หลายตัวในเครื่อง pip จะไปถูกติดตั้งอยู่ในไพธอนตัวไหนก็ขึ้นอยู่กับว่ารันด้วยไพธอนตัวไหน คำสั่ง python เป็นการไปรันไพธอนตัวไหนนั้นขึ้นอยู่กับตัวแปรสภาพแวดล้อม (environment variable)

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

```python
sudo python get-pip.py
```

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

```
sudo easy_install pip
```

สำหรับใน linux สามารถใช้คำสั่ง apt-get หรือ yum ได้

```python
sudo apt-get install python3-pip  # สำหรับ ubuntu, debian  
sudo yum install python3-pip  # สำหรับ centOS, fedora
```

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

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

```python
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
```

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

```python
pip install piexif==1.0.0
```

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

```python
pip install -U piexif
```

เท่านี้ก็จะกลายเป็นเวอร์ชันใหม่

```python
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 ไปก็จะขึ้นแบบนี้

```python
Requirement already satisfied: piexif in /anaconda3/lib/python3.7/site-packages (1.1.2)
```

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

```python
pip install piexif --force-reinstall
```

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

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

```python
pip install piexif --user
```

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

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

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

```python
pip install piexif imageio scikit-image
```

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

```python
pip install -r r.txt
```

**ใช้ --no-chache-dir**

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

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

สถานที่เก็บจะต่างกันไป ขึ้นกับระบบปฏิบัติการ

* ใน windows อยู่ใน **โฟลเดอร์ที่ลงไว้\pip\Cache** &#x20;
* ใน mac อยู่ใน **Users/ชื่อผู้ใช้/Library/Caches/pip** &#x20;
* ใน linux อยู่ใน **home/ชื่อผู้ใช้/.cache/pip** &#x20;

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

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

```python
pip install piexif --no-chache-dir
```

**pip uninstall**

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

```python
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

```python
pip uninstall -y piexif
```

แบบนี้ก็จะเป็นการเอาออกทันที

```python
Uninstalling piexif-1.1.2:  
Successfully uninstalled piexif-1.1.2
```

![](https://phyblas.hinaboshi.com/rup/nayuki/2019/a15.png)

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

```python
pip uninstall -r r.txt
```

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

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

```python
pip download piexif
```

ก็จะได้ไฟล์มาโหลดเก็บไว้

```python
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 ตามด้วยชื่อไฟล์

```python
pip install piexif-1.1.2-py2.py3-none-any.whl
```

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

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

```python
pip list
```

ได้

```python
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

```python
pip list -u
```

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

```python
pip freeze
```

ได้ผลเป็นแบบนี้

```python
alabaster==0.7.11  
anaconda-client==1.7.2  
anaconda-navigator==1.9.4  
ฯลฯ
```

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

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

```python
pip freeze > r.txt
```

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

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

```python
pip search piexif
```

ได้

```python
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 ใช้แสดงรายละเอียดของแพ็กเกจที่ลงไว้ได้

```python
pip show piexif
```

ได้

```python
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 จะแสดงรายชื่อไฟล์ทั้งหมดที่ลงอยู่ในแพ็กเกจนั้น

```python
pip show -f piexif
```

**import pip**

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

ตัวอย่างเช่น

```python
import pip
print(pip.__version__) # ได้ 18.1
```

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

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

```python
pip install piexif -v
```

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

```python
pip install piexif -q
```

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

```python
pip install piexif --log log.txt
```

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

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

```python
pip -V
```

ได้

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

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

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

```python
pip -h
```

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

```python
pip list -h
```

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

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

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

ทั้งหมดนี้สามารถทำโดยอัตโนมัติด้วยวิธีต่างๆ จะเขียนคำสั่งซ้อนกันในเชลก็ได้ หรืออาจใช้ไพธอน โดยเรียกคำสั่งในเชลด้วย subprocess.check\_output

```python
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](https://phyblas.hinaboshi.com/20190118)

> Reference : [https://phyblas.hinaboshi.com](https://phyblas.hinaboshi.com/20190114)
