ไฟล์ไพ ธ อนเหล่านี้มีความหมายว่าอะไร?
- .pyc
- .pyd
- .pyo
อะไรคือความแตกต่างระหว่างพวกเขาและพวกเขาสร้างจากไฟล์ * .py อย่างไร
ไฟล์ไพ ธ อนเหล่านี้มีความหมายว่าอะไร?
อะไรคือความแตกต่างระหว่างพวกเขาและพวกเขาสร้างจากไฟล์ * .py อย่างไร
คำตอบ:
.py
: นี่คือรหัสแหล่งอินพุตที่คุณเขียน.pyc
: นี่เป็นโค้ดไบต์ที่คอมไพล์แล้ว หากคุณนำเข้าโมดูลหลามจะสร้าง*.pyc
ไฟล์ที่มีรหัสไบต์เพื่อทำให้การนำเข้าอีกครั้งง่ายขึ้นในภายหลัง (และเร็วกว่า).pyo
: นี่เป็นรูปแบบไฟล์ที่ใช้ก่อน Python 3.5 สำหรับ*.pyc
ไฟล์ที่สร้างขึ้นด้วยการปรับแต่งค่า ( -O
) (ดูหมายเหตุด้านล่าง).pyd
: นี่เป็นไฟล์ dll windows http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllนอกจากนี้สำหรับการอภิปรายเพิ่มเติมเกี่ยวกับ.pyc
vs .pyo
ลองดูที่: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (ฉันได้คัดลอกส่วนสำคัญด้านล่าง)
- เมื่อมีการเรียกใช้ตัวแปลภาษาไพ ธ อนด้วยแฟล็ก -O รหัสที่ได้รับการปรับปรุงจะถูกสร้างและเก็บไว้ในไฟล์ '.pyo' ขณะนี้เครื่องมือเพิ่มประสิทธิภาพไม่ได้ช่วยอะไรมาก มันลบงบยืนยันเท่านั้น เมื่อใช้ -O ไบต์ทั้งหมดจะถูกปรับให้เหมาะสม ไฟล์. pyc ถูกเพิกเฉยและไฟล์. py ได้รับการคอมไพล์ด้วยไบต์ที่เหมาะสมที่สุด
- การผ่านแฟล็ก -O สองตัวไปยังตัวแปล Python (-OO) จะทำให้คอมไพเลอร์ bytecode ทำการปรับให้เหมาะสมซึ่งในบางกรณีที่หายากส่งผลให้โปรแกรมทำงานผิดพลาด ปัจจุบัน
__doc__
สตริงเท่านั้นที่จะถูกลบออกจาก bytecode ทำให้ไฟล์ '.pyo' มีขนาดเล็กลง เนื่องจากบางโปรแกรมอาจใช้โปรแกรมเหล่านี้คุณจึงควรใช้ตัวเลือกนี้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่- โปรแกรมจะไม่ทำงานเร็วขึ้นเมื่ออ่านจากไฟล์ '.pyc' หรือ '.pyo' มากกว่าเมื่ออ่านจากไฟล์ '.py' สิ่งเดียวที่เร็วขึ้นเกี่ยวกับไฟล์ '.pyc' หรือ '.pyo' คือความเร็วในการโหลด
- เมื่อสคริปต์ถูกเรียกใช้โดยให้ชื่อในบรรทัดคำสั่งไบต์สำหรับโค้ดจะไม่ถูกเขียนลงในไฟล์ '.pyc' หรือ '.pyo' ดังนั้นเวลาเริ่มต้นของสคริปต์อาจลดลงโดยการย้ายรหัสส่วนใหญ่ไปยังโมดูลและมีสคริปต์ bootstrap ขนาดเล็กที่นำเข้าโมดูลนั้น นอกจากนี้ยังเป็นไปได้ที่จะตั้งชื่อไฟล์ '.pyc' หรือ '.pyo' โดยตรงบนบรรทัดคำสั่ง
บันทึก:
ในวันที่ 2015-09-15 รุ่นPython 3.5 ได้ใช้งาน PEP-488 และกำจัด.pyo
ไฟล์ต่างๆ ซึ่งหมายความว่า.pyc
ไฟล์จะแสดงทั้งไบต์ที่ไม่ได้เพิ่มประสิทธิภาพและปรับให้เหมาะสม
def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
.pyo
ไฟล์ แม้แต่รหัสที่ได้รับการปรับปรุงให้ดีที่สุดก็ลงท้ายด้วย.pyc
Python 3.5 ที่ขยายออกไป
sys.path
ที่จะเพิ่ม ดูsite
โมดูลรายการส่วนขยายของไฟล์ Python เพิ่มเติมที่มีขนาดใหญ่ขึ้น (ส่วนใหญ่หายากและไม่เป็นทางการ) สามารถดูได้ที่http://dcjtech.info/topic/python-file-extensions/
.pth
ไฟล์