- ไฟล์
.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) โดยเติม-Otest.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

ขอบคุณ
ตอบลบ