Apa yang dilakukan ekstensi file python, .pyc .pyd .pyo?

436

Apa arti ekstensi file python ini?

  • .pyc
  • .pyd
  • .pyo

Apa perbedaan di antara mereka dan bagaimana mereka dihasilkan dari file * .py?

Yanki Twizzy
sumber

Jawaban:

481
  1. .py: Ini biasanya kode sumber input yang Anda tulis.
  2. .pyc: Ini adalah bytecode yang dikompilasi. Jika Anda mengimpor modul, python akan membuat *.pycfile yang berisi bytecode untuk menjadikannya mengimpor lagi nanti lebih mudah (dan lebih cepat).
  3. .pyo: Ini adalah format file yang digunakan sebelum Python 3.5 untuk *.pycfile yang dibuat dengan -Obendera optimisasi ( ). (lihat catatan di bawah)
  4. .pyd: Ini pada dasarnya adalah file windows dll. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Juga untuk beberapa diskusi lebih lanjut tentang .pycvs .pyo, lihat: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (Saya telah menyalin bagian penting di bawah)

  • Ketika interpreter Python dipanggil dengan flag -O, kode yang dioptimalkan dihasilkan dan disimpan dalam file '.pyo'. Pengoptimal saat ini tidak banyak membantu; itu hanya menghilangkan pernyataan tegas. Ketika -O digunakan, semua bytecode dioptimalkan; File .pyc diabaikan dan file .py dikompilasi untuk bytecode yang dioptimalkan.
  • Melewati dua -O flag ke interpreter Python (-OO) akan menyebabkan kompiler bytecode untuk melakukan optimasi yang dalam beberapa kasus jarang mengakibatkan program yang tidak berfungsi. Saat ini hanya __doc__string yang dihapus dari bytecode, menghasilkan file '.pyo' yang lebih ringkas. Karena beberapa program mungkin mengandalkan ini tersedia, Anda hanya boleh menggunakan opsi ini jika Anda tahu apa yang Anda lakukan.
  • Suatu program tidak berjalan lebih cepat ketika itu dibaca dari file '.pyc' atau '.pyo' daripada ketika itu dibaca dari file '.py'; satu-satunya hal yang lebih cepat tentang file '.pyc' atau '.pyo' adalah kecepatannya.
  • Ketika skrip dijalankan dengan memberikan namanya di baris perintah, bytecode untuk skrip tidak pernah ditulis ke file '.pyc' atau '.pyo'. Dengan demikian, waktu mulai skrip dapat dikurangi dengan memindahkan sebagian besar kodenya ke modul dan memiliki skrip bootstrap kecil yang mengimpor modul itu. Dimungkinkan juga untuk menamai file '.pyc' atau '.pyo' secara langsung pada baris perintah.

catatan:

Pada 2015-09-15 rilis Python 3.5 mengimplementasikan PEP-488 dan menghapus .pyofile. Ini berarti bahwa .pycfile mewakili bytecode yang tidak dioptimalkan dan dioptimalkan.

Bill Lynch
sumber
2
Apakah file dll dihasilkan dari skrip python atau skrip c / c ++?
Yanki Twizzy
1
@yankitwizzy: Ya. Mereka harus dihasilkan dari kode C / C ++. File harus dalam kode mesin, jadi tidak bisa langsung dari python.
Bill Lynch
"Pengoptimal saat ini tidak banyak membantu; itu hanya menghilangkan pernyataan tegas." Apa kau yakin tentang ini? Cobadef 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: Apakah saya yakin tentang apa? Bisakah Anda menjelaskan apa yang menurut Anda ditunjukkan oleh contoh Anda dan bukan hanya melemparkan kode dalam komentar.
Bill Lynch
9
Perhatikan bahwa dalam Python 3.5 , PEP 488 diimplementasikan, yang menghilangkan konsep .pyofile. Bahkan bytecode yang dioptimalkan berakhir dengan .pycekstensi Python 3.5, kemudian.
Michael Currie
229
  • .py - Skrip biasa
  • .py3 - (jarang digunakan) skrip Python3. Skrip Python3 biasanya diakhiri dengan ".py" tidak ".py3", tetapi saya telah melihatnya beberapa kali
  • .pyc - skrip yang dikompilasi (Bytecode)
  • .pyo - file pyc yang dioptimalkan (Pada Python3.5, Python hanya akan menggunakan pyc daripada pyo dan pyc)
  • .pyw - Skrip Python untuk dijalankan dalam mode Windowed, tanpa konsol; dieksekusi dengan pythonw.exe
  • .pyx - Cython src akan dikonversi ke C / C ++
  • .pyd - Skrip Python dibuat sebagai Windows DLL
  • .pxd - Skrip Cython yang setara dengan header C / C ++
  • .pxi - rintisan MyPy
  • .pyi - File rintisan ( PEP 484 )
  • .pyz - Arsip skrip Python ( PEP 441 ); ini adalah skrip yang berisi skrip Python terkompresi (ZIP) dalam bentuk biner setelah header skrip Python standar
  • .pywz - Arsip skrip Python untuk MS-Windows ( PEP 441 ); ini adalah skrip yang berisi skrip Python terkompresi (ZIP) dalam bentuk biner setelah header skrip Python standar
  • .py [cod] - notasi wildcard di ".gitignore" yang berarti file tersebut mungkin ".pyc", ".pyo", atau ".pyd".
  • .pth - file konfigurasi jalur; isinya adalah item tambahan (satu per baris) untuk ditambahkan sys.path. Lihat sitemodul.

Daftar ekstensi file Python tambahan yang lebih besar (kebanyakan jarang dan tidak resmi) dapat ditemukan di http://dcjtech.info/topic/python-file-extensions/

Devyn Collier Johnson
sumber
11
Perlu dicatat bahwa file «.pyx» bukan sumber Python yang dikonversi ke C, melainkan kode sumber Cython (yaitu: menunggu untuk dikonversi ke C)
Fred Osterrath
Apa yang "saya" wakili dalam ekstensi PYI? "Sertakan" / "Implementasi" / "Antarmuka"?
ChrisFreeman
1
.pyw berarti skrip PYthon yang menciptakan Window, bukan Python 4 Windows. .pyw dapat dieksekusi di bawah * nix
Kotauskas
1
Secara umum .pyw adalah skrip untuk dijalankan dalam mode Windowed, yaitu tanpa output konsol. Sebagai @VladislavToncharov menyatakan mereka dapat dijalankan pada sebagian besar platform yang mendukung python jika diinstal .
Steve Barnes
1
Jawaban ini harus membahas .pthfile.
wim