Anladığım kadarıyla önbellek, benzer dosyalardan oluşan şifrelenmiş bir dosya.
pycache` klasörü ile ne yapacağız? Kaynak kodumuz yerine insanlara verdiğimiz şey bu mu? Sadece benim girdi verilerim mi? Bu klasör sürekli oluşturuluyor, ne işe yarıyor?
Python'da bir program çalıştırdığınızda, yorumlayıcı önce onu bytecode'a derler (bu aşırı basitleştirmedir) ve __pycache__
klasöründe saklar. Oraya bakarsanız, projenizin klasöründeki .py dosyalarının adlarını paylaşan bir grup dosya bulacaksınız, sadece uzantıları .pyc veya .pyo olacaktır. Bunlar sırasıyla programınızın bytecode ile derlenmiş ve optimize edilmiş bytecode ile derlenmiş versiyonlarıdır.
Bir programcı olarak, bunu büyük ölçüde görmezden gelebilirsiniz... Tek yaptığı programınızın biraz daha hızlı başlamasını sağlamaktır. Komut dosyalarınız değiştiğinde, yeniden derlenirler ve dosyaları veya tüm klasörü silip programınızı tekrar çalıştırırsanız, yeniden görünürler (bu davranışı özellikle bastırmadığınız sürece)
Eğer cpython kullanıyorsanız (referans uygulama olduğu için en yaygın olanı budur) ve bu klasörü istemiyorsanız, yorumlayıcıyı -B bayrağı ile başlatarak bunu bastırabilirsiniz, örneğin
python -B foo.py
Diğer bir seçenek, tcaswell tarafından belirtildiği gibi, `PYTHONDONTWRITEBYTECODE' ortam değişkenini herhangi bir değere ayarlamaktır (python'un man sayfasına göre, herhangi bir "boş olmayan string").
pycache` derlenmiş ve çalıştırılmaya hazır Python 3 bytecode içeren bir klasördür.
Performansa zarar verebileceğinden, geliştirme sırasında bu dosyaların rutin olarak silinmesini veya oluşturulmasının engellenmesini önermiyorum. Sadece gerektiğinde temizlemek için özyinelemeli bir komut hazır bulundurun (aşağıya bakın), çünkü bytecode uç durumlarda eski hale gelebilir (yorumlara bakın).
Python programcıları genellikle bytecode'u görmezden gelir. Gerçekten de __pycache__
ve *.pyc
, .gitignore
dosyalarında sıkça görülen satırlardır. Bytecode dağıtım için değildir ve dis
modülü kullanılarak demonte edilebilir.
OS X kullanıyorsanız, projenizin kök klasöründen aşağıdaki komutu çalıştırarak projenizdeki tüm bu klasörleri kolayca gizleyebilirsiniz.
find . -name '__pycache__' -exec chflags hidden {} \;
Python 2 için __pycache__
yerine *.pyc
yazın.
Bu, tüm bu dizinlere (.pyc dosyaları) Finder/Textmate 2'nin bunları listelerden hariç tutmasını söyleyen bir bayrak ayarlar. Önemli olan bytecode'un orada olması, sadece gizlenmiş olmasıdır.
Yeni modüller oluşturur ve yeni bayt kodunu gizlemek isterseniz veya gizli bayt kodu dosyalarını silerseniz komutu yeniden çalıştırın.
Windows'ta eşdeğer komut şu şekilde olabilir (test edilmedi, toplu iş betiği kabul edilir):
dir * /s/b | findstr __pycache__ | attrib +h +s +r
Bu, sağ tıklama > gizle... kullanarak proje gizleme klasörlerinden geçmekle aynıdır.
Birim testlerini çalıştırmak, *.pyc
dosyalarını ve __pycache__
klasörlerini silmenin gerçekten yararlı olduğu bir senaryodur (daha fazlası yorumlarda). Aşağıdaki satırları ~/.bash_profile
dosyamda kullanıyorum ve gerektiğinde temizlemek için sadece cl
çalıştırıyorum.
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
3.2 ve sonraki sürümlerde Python, .pyc derlenmiş bayt kodu dosyalarını, kaynak dosyalarınızın bulunduğu dizinde yer alan __pycache__
adlı bir alt dizine, bunları oluşturan Python sürümünü tanımlayan dosya adlarıyla kaydeder (örn. script.cpython-33.pyc)