นามสกุลไฟล์หลาม, .pyc .pyd .pyo คืออะไร


436

ไฟล์ไพ ธ อนเหล่านี้มีความหมายว่าอะไร?

  • .pyc
  • .pyd
  • .pyo

อะไรคือความแตกต่างระหว่างพวกเขาและพวกเขาสร้างจากไฟล์ * .py อย่างไร

คำตอบ:


481
  1. .py: นี่คือรหัสแหล่งอินพุตที่คุณเขียน
  2. .pyc: นี่เป็นโค้ดไบต์ที่คอมไพล์แล้ว หากคุณนำเข้าโมดูลหลามจะสร้าง*.pycไฟล์ที่มีรหัสไบต์เพื่อทำให้การนำเข้าอีกครั้งง่ายขึ้นในภายหลัง (และเร็วกว่า)
  3. .pyo: นี่เป็นรูปแบบไฟล์ที่ใช้ก่อน Python 3.5 สำหรับ*.pycไฟล์ที่สร้างขึ้นด้วยการปรับแต่งค่า ( -O) (ดูหมายเหตุด้านล่าง)
  4. .pyd: นี่เป็นไฟล์ dll windows http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

นอกจากนี้สำหรับการอภิปรายเพิ่มเติมเกี่ยวกับ.pycvs .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ไฟล์จะแสดงทั้งไบต์ที่ไม่ได้เพิ่มประสิทธิภาพและปรับให้เหมาะสม


2
ไฟล์ dll สร้างจากสคริปต์ไพ ธ อนหรือสคริปต์ c / c ++ หรือไม่
Yanki Twizzy

1
@yankitwizzy: ใช่ ควรสร้างจากรหัส C / C ++ ไฟล์ควรอยู่ในรหัสเครื่องจึงไม่สามารถเรียกโดยตรงจาก python
Bill Lynch

"เครื่องมือเพิ่มประสิทธิภาพไม่ได้ช่วยอะไรมากในขณะนี้ แต่จะลบข้อความยืนยันเท่านั้น" คุณแน่ใจเกี่ยวกับเรื่องนี้? ลอง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));
Jorge Leitao

@ JCLeitão: ฉันแน่ใจเกี่ยวกับอะไร คุณช่วยอธิบายสิ่งที่คุณคิดว่าตัวอย่างของคุณแสดงมากกว่าแค่การโยนรหัสในความคิดเห็น
Bill Lynch

9
โปรดทราบว่าในหลาม 3.5 , PEP 488จะดำเนินการซึ่งจะไปกับแนวคิดของ.pyoไฟล์ แม้แต่รหัสที่ได้รับการปรับปรุงให้ดีที่สุดก็ลงท้ายด้วย.pycPython 3.5 ที่ขยายออกไป
Michael Currie

228
  • .py - สคริปต์ปกติ
  • .py3 - สคริปต์ Python3 (ไม่ค่อยได้ใช้) สคริปต์ Python3 มักจะลงท้ายด้วย ".py" ไม่ใช่ ".py3" แต่ฉันเห็นมาแล้วสองสามครั้ง
  • .pyc - สคริปต์ที่รวบรวม (Bytecode)
  • .pyo - ไฟล์ pyc ที่ได้รับการปรับปรุง (ตั้งแต่ Python3.5, Python จะใช้ pyc มากกว่า pyo และ pyc เท่านั้น)
  • .pyw - สคริปต์ Python เพื่อให้ทำงานในโหมด Windowed โดยไม่มีคอนโซล ดำเนินการกับ pythonw.exe
  • .pyx - Cython src ที่จะแปลงเป็น C / C ++
  • .pyd - สคริปต์ Python สร้างเป็น Windows DLL
  • .pxd - สคริปต์ Cython ซึ่งเทียบเท่ากับส่วนหัว C / C ++
  • .pxi - ต้นขั้ว MyPy
  • .pyi - ไฟล์ Stub ( PEP 484 )
  • .pyz - เก็บสคริปต์ Python ( PEP 441 ); นี่เป็นสคริปต์ที่มีสคริปต์ Python บีบอัด (ZIP) ในรูปแบบไบนารีหลังจากส่วนหัวของสคริปต์ Python มาตรฐาน
  • .pywz - เก็บสคริปต์ Python สำหรับ MS-Windows ( PEP 441 ); นี่เป็นสคริปต์ที่มีสคริปต์ Python บีบอัด (ZIP) ในรูปแบบไบนารีหลังจากส่วนหัวของสคริปต์ Python มาตรฐาน
  • .py [cod] - สัญลักษณ์ตัวแทนใน ".gitignore" ซึ่งหมายความว่าไฟล์อาจเป็น ".pyc", ".pyo" หรือ ".pyd"
  • .pth - ไฟล์การกำหนดค่าพา ธ ; เนื้อหาของรายการเพิ่มเติม (หนึ่งต่อบรรทัด) sys.pathที่จะเพิ่ม ดูsiteโมดูล

รายการส่วนขยายของไฟล์ Python เพิ่มเติมที่มีขนาดใหญ่ขึ้น (ส่วนใหญ่หายากและไม่เป็นทางการ) สามารถดูได้ที่http://dcjtech.info/topic/python-file-extensions/


11
ควรสังเกตว่าไฟล์« .pyx »นั้นไม่ได้เป็นแหล่งของงูใหญ่ที่ถูกแปลงเป็น C แต่เป็นรหัสต้นฉบับของ Cython (เช่น: กำลังรอการแปลงเป็น C)
Fred Osterrath

"ฉัน" หมายถึงอะไรในส่วนขยาย PYI "รวม" / "การใช้งาน" / "ส่วนต่อประสาน"?
ChrisFreeman

1
.pyw หมายถึงสคริปต์ PYthon ที่สร้างหน้าต่างไม่ใช่ Python 4 Windows .pyw สามารถดำเนินการได้ภายใต้ * ระวัง
Kotauskas

1
โดยทั่วไป. pyw เป็นสคริปต์ที่ใช้ในโหมด Windowed คือไม่มีเอาต์พุตคอนโซล ในฐานะที่เป็น @VladislavToncharov ระบุพวกเขาสามารถทำงานในที่สุดแพลตฟอร์มที่สนับสนุนหลามถ้ามีการติดตั้ง
Steve Barnes

1
คำตอบนี้ควรหารือเกี่ยวกับ.pthไฟล์
Wim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.