- ไฟล์
.pyc
คือ ไฟล์ .py ที่ถูก CPython compile แปลงเป็น byte code แล้ว ช่วยให้สามารถนำได้เลยโดยไม่ต้องมา compile ใหม่ - ไฟล์
.pyo
คือ ไฟล์ .pyc ที่ถูกปรับแต่งประสิทธิภาพให้สามารถรันได้ดีขึ้นและมีประสิทธิภาพมากยิ่งขึ้น (ปัจจุบัน CPython ยกเลิกการสร้างเป็นไฟล์ .pyo แล้ว ใช้เป็น .pyc แทน)
ไฟล์
.pyc
สามารถทำได้โดยอ่านจากบทความ compile python ไฟล์ .pyในการแปลงเป็น
.pyc
ทำได้ดังนี้- สำหรับไฟล์เดียวใช้คำสั่ง
python -m py_compile ไฟล์.py
- สำหรับไฟล์ในโฟลเดอร์ใช้คำสั่ง
python -m compileall ที่อยู่โฟลเดอร์ที่ต้องการ
.pyo
นั้นเพียงเติม -O
หรือ -OO
ไว้หลัง python
ข้อควรรู้เกี่ยวกับ -O กับ -OO
-O
เป็นการปรับแต่งประสิทธิภาพ (optimized code) เบื้องต้น-OO
เป็นการปรับแต่งประสิทธิภาพ (optimized code) โดยละทิ้ง docstrings ออกไป
- สำหรับไฟล์เดียวใช้คำสั่ง
python -O -m py_compile ไฟล์.py
- สำหรับไฟล์ในโฟลเดอร์ใช้คำสั่ง
python -O -m compileall ที่อยู่โฟลเดอร์ที่ต้องการ
แล้วลองทำการแปลงเป็น
.pyc
และ .pyo
โดยเปิดคอมมานด์ไลน์ใช้คำสั่งpython -m py_compile test.py python -O -m py_compile test.py python -OO -m py_compile test.py
จะได้โฟลเดอร์
__pycache__
ขึ้นมา โดยจะเก็บไฟล์ .pyc
เอาไว้
ภายในโฟลเดอร์
__pycache__
จะพบไฟล์test.cpython-35.pyc
นี่คือ ไฟล์.pyc
ปกติtest.cpython-35.opt-1.pyc
นี่คือ ไฟล์.pyc
ที่ถูกปรับแต่ง (หรือ .pyo) โดยเติม-O
test.cpython-35.opt-2.pyc
นี่คือ ไฟล์.pyc
ที่ถูกปรับแต่ง (หรือ .pyo) โดยเติม-OO
time
ใน Linux วัดความเร็วผลลัพธ์
ไฟล์
test.py
$ time python3 test.py Hello! :) real 0m0.060s user 0m0.056s sys 0m0.004s
ไฟล์
test.cpython-35.pyc
$ time python3 test.cpython-35.pyc Hello! :) real 0m0.035s user 0m0.032s sys 0m0.004s
ไฟล์
test.cpython-35.opt-1.pyc
$ time python3 test.cpython-35.opt-1.pyc Hello! :) real 0m0.034s user 0m0.024s sys 0m0.008s
ไฟล์
test.cpython-35.opt-2.pyc
$ time python3 test.cpython-35.opt-2.pyc Hello! :) real 0m0.034s user 0m0.036s sys 0m0.000s
จะเห็นได้ว่า พอแปลงไฟล์
.py
เป็น .pyc
และ .pyo
จะรันได้เร็วกว่า .py
ข้อเสียคือ รันได้เฉพาะ CPython เวชั่น ระบบปฏิบัติการและสถาปัตยกรรมที่เหมือนกันเท่านั้น
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
สอน Python
ขอบคุณ
ตอบลบ