Dari apa yang saya mengerti, cache adalah file terenkripsi dari file serupa.
Apa yang kita lakukan dengan __pycache__
folder itu? Apakah itu yang kami berikan kepada orang-orang dan bukan kode sumber kami? Apakah ini hanya data input saya? Folder ini terus dibuat, untuk apa?
python
python-3.x
caching
pengguna2063042
sumber
sumber
Python 3.8
Anda dapat menggunakan variabel lingkungan untuk mengubah lokasi untuk direktori cache yang menjengkelkan: stackoverflow.com/a/57414308/1612318Jawaban:
Ketika Anda menjalankan sebuah program dengan python, interpreter mengkompilasinya untuk bytecode terlebih dahulu (ini adalah penyederhanaan yang berlebihan) dan menyimpannya dalam
__pycache__
folder. Jika Anda melihat di sana Anda akan menemukan banyak file berbagi nama file .py di folder proyek Anda, hanya ekstensi mereka akan menjadi .pyc atau .pyo. Ini adalah masing-masing versi bytecode-compiled dan dioptimalkan bytecode-compile file Anda.Sebagai seorang programmer, Anda bisa mengabaikannya ... Yang dilakukannya hanyalah membuat program Anda mulai lebih cepat. Ketika skrip Anda berubah, mereka akan dikompilasi ulang, dan jika Anda menghapus file atau seluruh folder dan menjalankan program Anda lagi, mereka akan muncul kembali (kecuali Anda secara khusus menekan perilaku itu)
Jika Anda menggunakan cpython (yang merupakan yang paling umum, karena ini adalah implementasi referensi) dan Anda tidak ingin folder itu, maka Anda dapat menekannya dengan memulai penerjemah dengan flag -B, misalnya
Opsi lain, seperti dicatat oleh tcaswell, adalah mengatur variabel lingkungan
PYTHONDONTWRITEBYTECODE
ke nilai apa pun (menurut halaman manual python, "string tidak kosong").sumber
PYTHONDONTWRITEBYTECODE=<any_value>
untuk menekannya secara permanen.python2
menempatkan file yang dikompilasi di direktori yang sama dengan aslinya, jika saya tidak salah.find . -name '*.pyc' -delete
Ya, find memiliki flag untuk menghapus file yang ditemukan, jadi Anda tidak perlu menggunakan shananigans xargs__pycache__
adalah folder yang mengandung bytecode Python 3 yang dikompilasi dan siap dieksekusi .Saya tidak merekomendasikan menghapus file-file ini secara rutin atau menekan pembuatan selama pengembangan karena dapat merusak kinerja. Cukup siapkan perintah rekursif (lihat di bawah) untuk membersihkan bila diperlukan karena bytecode dapat menjadi basi pada kasus tepi (lihat komentar).
Pemrogram python biasanya mengabaikan bytecode. Memang
__pycache__
dan*.pyc
merupakan baris umum untuk dilihat dalam.gitignore
file. Bytecode tidak dimaksudkan untuk distribusi dan dapat dibongkar menggunakandis
modul .Jika Anda menggunakan OS X, Anda dapat dengan mudah menyembunyikan semua folder ini di proyek Anda dengan menjalankan perintah berikut dari folder root proyek Anda.
Ganti
__pycache__
dengan*.pyc
untuk Python 2.Ini menetapkan tanda pada semua direktori (file .pyc) yang memberitahukan Finder / Textmate 2 untuk mengeluarkannya dari daftar. Yang penting bytecode ada, itu hanya disembunyikan.
Jalankan kembali perintah jika Anda membuat modul baru dan ingin menyembunyikan bytecode baru atau jika Anda menghapus file bytecode yang tersembunyi.
Pada Windows, perintah yang setara mungkin (tidak diuji, diterima skrip batch):
Yang sama seperti melalui proyek menyembunyikan folder menggunakan klik kanan> sembunyikan ...
Menjalankan tes unit adalah satu skenario (lebih banyak di komentar) di mana menghapus
*.pyc
file dan__pycache__
folder memang berguna. Saya menggunakan baris berikut di saya~/.bash_profile
dan hanya menjalankancl
untuk membersihkan bila diperlukan.sumber
Sebuah
__pycache__
folder dibuat ketika Anda menggunakan baris:atau coba dapatkan informasi dari file lain yang telah Anda buat. Ini membuatnya sedikit lebih cepat ketika menjalankan program Anda untuk kedua kalinya untuk membuka file lainnya.
sumber
Jawaban yang diperbarui dari 3,7+ dokumen:
Sumber: https://docs.python.org/3/tutorial/modules.html#compiled-python-files
Yaitu, direktori ini dibuat oleh Python dan ada untuk membuat program Anda berjalan lebih cepat. Seharusnya tidak berkomitmen untuk kontrol sumber, dan harus hidup berdampingan dengan damai dengan kode sumber lokal Anda.
__pycache__
adalah direktori yang berisi file cache bytecode yang secara otomatis dihasilkan oleh python, yaitu dikompilasi python, atau.pyc
, file. Anda mungkin bertanya-tanya mengapa Python, bahasa "ditafsirkan", memiliki semua file yang dikompilasi. SO ini menjawab pertanyaan itu (dan pasti layak membaca jawaban ini ).Python docs menggali lebih dalam tentang cara kerjanya dan mengapa ia ada:
.pyc
file dalam direktori yang sama menyebabkan berbagai masalah, seperti ketika sebuah program dijalankan dengan interpreter Python dari versi yang berbeda. Untuk spesifikasi fitur lengkap, lihat PEP 3174 .sumber
dari Modul tutorial python resmi
dari Python doc Programming FAQs
sumber
Eksekusi skrip python akan menyebabkan kode byte dihasilkan dalam memori dan disimpan hingga program dimatikan. Jika modul diimpor, agar dapat digunakan kembali lebih cepat, Python akan membuat file cache .pyc (PYC adalah 'Python' 'Dikompilasi') di mana kode byte modul yang diimpor di-cache. Ide adalah untuk mempercepat memuat modul python dengan menghindari kompilasi ulang (kompilasi sekali, jalankan kebijakan beberapa kali) ketika mereka diimpor kembali.
Nama file sama dengan nama modul. Bagian setelah titik awal menunjukkan implementasi Python yang membuat cache (bisa CPython) diikuti oleh nomor versinya.
sumber
Interpreter python mengkompilasi file skrip * .py dan menyimpan hasil kompilasi ke
__pycache__
direktori.Ketika proyek dieksekusi lagi, jika interpreter mengidentifikasi bahwa skrip * .py belum dimodifikasi, skrip tersebut melewatkan langkah kompilasi dan menjalankan file * .pyc yang dihasilkan sebelumnya yang disimpan dalam
__pycache__
folder.Ketika proyek ini kompleks, Anda dapat membuat waktu persiapan sebelum proyek berjalan lebih pendek. Jika program ini terlalu kecil, Anda dapat mengabaikan bahwa dengan menggunakan
python -B abc.py
denganB
pilihan.sumber
Python Version 2.x akan memiliki .pyc ketika interpreter mengkompilasi kode.
Versi Python 3.x akan memiliki __pycache__ ketika penerjemah mengkompilasi kode.
sumber
Dalam 3.2 dan yang lebih baru, Python menyimpan .pyc mengkompilasi file kode byte dalam sub-direktori bernama yang
__pycache__
terletak di direktori tempat file sumber Anda berada dengan nama file yang mengidentifikasi versi Python yang membuatnya (mis. Script.cpython-33.pyc)sumber
Saat Anda mengimpor modul ,
Python menyimpan bytecode yang dikompilasi dalam
__pycache__
direktori sehingga impor di masa depan dapat menggunakannya secara langsung, daripada harus mengurai dan mengkompilasi sumber lagi.Itu tidak melakukan itu hanya untuk menjalankan skrip, hanya ketika file diimpor.
(Versi sebelumnya digunakan untuk menyimpan bytecode yang di-cache sebagai file .pyc yang mengotori direktori yang sama dengan file .py, tetapi mulai dengan Python 3 mereka dipindahkan ke subdirektori untuk membuat hal-hal lebih rapi.)
PYTHONDONTWRITEBYTECODE ---> Jika ini disetel ke string yang tidak kosong, Python tidak akan mencoba menulis file .pyc pada impor modul sumber. Ini sama dengan menentukan opsi -B.
sumber