Pliki .pyc generowane za każdym razem, gdy odpowiednie elementy kodu są importowane i aktualizowane, jeśli odpowiednie pliki kodu zostały zaktualizowane. Jeśli pliki .pyc zostaną usunięte, zostaną automatycznie wygenerowane ponownie. Jednak nie są one automatycznie usuwane po usunięciu odpowiednich plików kodu.
Może to powodować naprawdę zabawne błędy podczas refaktorów na poziomie plików.
Po pierwsze, możesz skończyć z wypychaniem kodu, który działa tylko na twoim komputerze i na nikim innym. Jeśli masz wiszące odniesienia do usuniętych plików, będą one nadal działać lokalnie, jeśli nie usuniesz ręcznie odpowiednich plików .pyc, ponieważ pliki .pyc mogą być używane podczas importowania. Jest to potęgowane faktem, że odpowiednio skonfigurowany system kontroli wersji będzie przesyłać tylko pliki .py do centralnego repozytorium, a nie pliki .pyc, co oznacza, że Twój kod może przejść „test importu” (czy wszystko jest poprawnie importowane) po prostu dobrze i nie pracować na komputerze innej osoby.
Po drugie, możesz mieć całkiem okropne błędy, jeśli zamienisz pakiety w moduły. Gdy konwertujesz pakiet (folder z __init__.py
plikiem) na moduł (plik .py), pliki .pyc, które kiedyś reprezentowały ten pakiet, pozostają. W szczególności __init__.pyc
szczątki. Tak więc, jeśli masz pakiet foo z jakimś kodem, który nie ma znaczenia, później usuń ten pakiet i utwórz plik foo.py z jakąś funkcją def bar(): pass
i uruchom:
from foo import bar
dostajesz:
ImportError: cannot import name bar
ponieważ python nadal używa starych plików .pyc z pakietu foo, z których żaden nie definiuje bar. Może to być szczególnie problematyczne na serwerze internetowym, gdzie całkowicie działający kod może się zepsuć z powodu plików .pyc.
W wyniku obu tych powodów (i być może innych) kod wdrożenia i kod testowy powinny usunąć pliki .pyc, takie jak następujący wiersz bash:
find . -name '*.pyc' -delete
Ponadto, począwszy od pythona 2.6, możesz uruchomić Pythona z -B
flagą, aby nie używać plików .pyc. Zobacz Jak unikać plików .pyc? po więcej szczegółów.
Zobacz też: Jak usunąć wszystkie pliki .pyc z projektu?
rm *.pyc
. Nie spowoduje to usunięcia plików .pyc w zagnieżdżonych folderach. Użyjfind . -name '*.pyc' -delete
zamiast tego