.pyc dosyaları, karşılık gelen kod öğeleri içe aktarıldığında oluşturulur ve ilgili kod dosyaları güncellendiyse güncellenir. .Pyc dosyaları silinirse, otomatik olarak yeniden oluşturulurlar. Ancak, bunlar edilir değil tekabül kod dosyaları silindiğinde otomatik olarak silinir.
Bu, dosya düzeyinde yeniden yapılandırmalar sırasında gerçekten eğlenceli hatalara neden olabilir.
Her şeyden önce, yalnızca makinenizde ve başka hiç kimsede çalışmayan kodu zorlayabilirsiniz. Sildiğiniz dosyalar için sarkan referanslarınız varsa, ilgili .pyc dosyalarını manuel olarak silmediğinizde bunlar yerel olarak çalışmaya devam eder, çünkü .pyc dosyaları içe aktarmalarda kullanılabilir. Bu, uygun şekilde yapılandırılmış bir sürüm kontrol sisteminin .py dosyalarını .pyc dosyalarına değil, yalnızca merkezi depoya göndereceği gerçeğiyle birleşir, bu da kodunuzun "içe aktarma testini" geçebileceği (her şey yolunda mı) olduğu ve iyi olmadığı anlamına gelir. başkasının bilgisayarında çalışmak.
İkincisi, paketleri modüllere dönüştürürseniz oldukça korkunç hatalar yaşayabilirsiniz. Bir paketi ( __init__.py
dosya içeren bir klasör ) bir modüle (.py dosyası) dönüştürdüğünüzde, bir zamanlar bu paketi temsil eden .pyc dosyaları kalır. Özellikle __init__.pyc
kalıntılar. Öyleyse, önemli olmayan bazı kodlara sahip foo paketine sahipseniz, daha sonra bu paketi silin ve bazı işlevlere sahip bir foo.py dosyası oluşturun def bar(): pass
ve çalıştırın:
from foo import bar
alırsın:
ImportError: cannot import name bar
çünkü python hala foo paketindeki eski .pyc dosyalarını kullanıyor, hiçbiri bar'ı tanımlamıyor. Bu, özellikle .pyc dosyaları nedeniyle tamamen çalışan kodun bozulabildiği bir web sunucusunda sorunlu olabilir.
Bu iki nedenin (ve muhtemelen diğerlerinin) bir sonucu olarak, dağıtım kodunuz ve test kodunuz, aşağıdaki bash satırında olduğu gibi .pyc dosyalarını silmelidir:
find . -name '*.pyc' -delete
Ayrıca, python 2.6'dan itibaren, -B
.pyc dosyalarını kullanmamak için python'u bayrakla çalıştırabilirsiniz . Bkz .pyc dosyaları nasıl engellenir? daha fazla ayrıntı için.
Ayrıca bkz: Tüm .pyc dosyalarını bir projeden nasıl kaldırırım?
rm *.pyc
. Bu, iç içe klasörlerdeki .pyc dosyalarını silmez.find . -name '*.pyc' -delete
Bunun yerine kullanın