File .pyc dibuat setiap kali elemen kode yang sesuai diimpor, dan diperbarui jika file kode terkait telah diperbarui. Jika file .pyc dihapus, mereka akan dibuat ulang secara otomatis. Namun, mereka tidak secara otomatis dihapus ketika file kode terkait dihapus.
Ini dapat menyebabkan beberapa bug yang sangat menyenangkan selama refactors tingkat file.
Pertama-tama, Anda dapat mendorong kode yang hanya berfungsi pada mesin Anda dan tidak pada mesin orang lain. Jika Anda memiliki referensi yang menggantung ke file yang Anda hapus, ini akan tetap berfungsi secara lokal jika Anda tidak menghapus file .pyc yang relevan secara manual karena file .pyc dapat digunakan dalam impor. Ini ditambah dengan fakta bahwa sistem kontrol versi yang dikonfigurasi dengan benar hanya akan mendorong file .py ke repositori pusat, bukan file .pyc, yang berarti bahwa kode Anda dapat lulus "uji impor" (melakukan impor semuanya dengan baik) dengan baik dan tidak bekerja di komputer orang lain.
Kedua, Anda dapat memiliki beberapa bug yang cukup parah jika Anda mengubah paket menjadi modul. Saat Anda mengonversi paket (folder dengan __init__.py
file) menjadi modul (file .py), file .pyc yang pernah mewakili paket itu tetap ada. Secara khusus, __init__.pyc
sisa - sisa. Jadi, jika Anda memiliki paket foo dengan beberapa kode yang tidak masalah, kemudian hapus paket itu dan buat file foo.py dengan beberapa fungsi def bar(): pass
dan jalankan:
from foo import bar
Anda mendapatkan:
ImportError: cannot import name bar
karena python masih menggunakan file .pyc lama dari paket foo, tidak ada yang mendefinisikan bilah. Hal ini dapat menjadi masalah terutama pada server web, di mana kode yang berfungsi total dapat rusak karena file .pyc.
Sebagai hasil dari kedua alasan ini (dan mungkin yang lainnya), kode penerapan dan kode pengujian Anda harus menghapus file .pyc, seperti dengan baris bash berikut:
find . -name '*.pyc' -delete
Selain itu, pada python 2.6, Anda dapat menjalankan python dengan -B
flag untuk tidak menggunakan file .pyc. Lihat Bagaimana cara menghindari file .pyc? untuk lebih jelasnya.
Lihat juga: Bagaimana cara menghapus semua file .pyc dari sebuah proyek?
rm *.pyc
. Ini tidak akan menghapus file .pyc dalam folder bersarang. Gunakanfind . -name '*.pyc' -delete
sebagai gantinya