Jaki jest NAJLEPSZY sposób na wyczyszczenie wszystkich __pycache__
folderów i .pyc/.pyo
plików z projektu python3. Widziałem, jak wielu użytkowników sugerowało pyclean
skrypt dołączony do Debiana, ale to nie usuwa folderów. Chcę w prosty sposób wyczyścić projekt przed wysłaniem plików do mojego DVS.
python
python-3.x
python-3.4
delete-file
SalientGreen
źródło
źródło
*__pycache__
,*.pyc*
i to nie rozróżnia plików i katalogów. Większość wygenerowanychrm
poleceń będzie również zbędna.find
anigrep
też nierm
i może to być niebezpieczne dla każdego aktualnego katalogu roboczego, które mogą zawieraćuseful.pycle.json
lubimportant_deployment_setting_about__pycache__.txt
itd. Które nie wyklucza na całej bazy użytkowników tzw. Nie wspominając już o tym, jak (niebezpiecznierm -rf
)xargs
zostałby uszkodzony plik z białą spacją w nazwie. Więc zredagowałem to…grep: parentheses not balanced
Sam znalazłem odpowiedź, kiedy błędnie wpisałem pyclean jako pycclean:
Bieganie
py3clean .
bardzo ładnie to wyczyściło.źródło
__pycache__
folderów ani.pyc
plików (testowane na debianie)macOS i Linux
find
Implementacja BSD w systemie macOS różni się od funkcji wyszukiwania GNU - jest zgodna zarówno z wyszukiwaniem BSD, jak i GNU. Zacznij od implementacji globalnej, używając-name
i-o
for or - Umieść tę funkcję w swoim.bashrc
pliku:Następnie
cd
do katalogu, który chcesz wyczyścić rekurencyjnie, i wpiszpyclean
.Tylko do wyszukiwania GNU
To jest tylko znalezisko GNU (tj. Linux), ale wydaje mi się, że jest trochę ładniejsze z wyrażeniem regularnym:
Dowolna platforma, korzystająca z Pythona 3
W systemie Windows prawdopodobnie nawet nie masz
find
. Prawdopodobnie masz jednak Python 3, który począwszy od 3.4 ma wygodnypathlib
moduł:-B
Flaga mówi Python nie pisać.pyc
plików. (Zobacz takżePYTHONDONTWRITEBYTECODE
zmienną środowiskową).Powyższe nadużycia zawierają listę składni do zapętlenia, ale podczas używania
python -c
styl jest raczej drugorzędnym problemem. Alternatywnie możemy nadużyć (na przykład)__import__
:Krytyka odpowiedzi
Najlepsza odpowiedź mówiła:
Wydawałoby się, że jest to mniej wydajne, ponieważ wykorzystuje trzy procesy.
find
przyjmuje wyrażenie regularne, więc nie potrzebujemy osobnego wywołaniagrep
. Podobnie stało-delete
, więc nie ma potrzeby oddzielnego wywołanierm
-I przeciwnie do komentarza tutaj, to będzie usuwać niepuste katalogi, tak długo, jak się opróżniane dzięki regularnym meczu ekspresji.Ze strony podręcznika
xargs
:źródło
shutil.rmtee
na__pycache__
katalogach zamiast najpierw je opróżniać; jednolinijkowy może być dobry dla łatwego aliasu. Jestem teraz wielkim fanemPath
, więc myślę, że użyję tej wersji w moim skrypcie.Ponieważ jest to projekt Python 3, wystarczy usunąć
__pycache__
katalogi - wszystkie pliki.pyc
/.pyo
znajdują się w nich.lub jego prostsza forma,
co z jakiegoś powodu nie zadziałało (pliki zostały usunięte, ale katalogi nie), więc ze względu na kompletność dołączam oba.
Alternatywnie, jeśli robisz to w katalogu, który jest pod kontrolą wersji, możesz nakazać RCS
__pycache__
rekurencyjne ignorowanie folderów. Następnie w odpowiednim momencie po prostu wyczyść wszystkie zignorowane pliki. Prawdopodobnie będzie to wygodniejsze, ponieważ prawdopodobnie będzie trzeba posprzątać więcej niż tylko__pycache__
.źródło
.pyc
pliki się w nim znajdują.Directory not empty
tutaj drugi wariant?To jest mój alias, który działa zarówno z Pythonem 2, jak i Pythonem 3, usuwając rekursywnie wszystkie
.pyc .pyo
pliki i__pycache__
katalogi.źródło
Jeśli potrzebujesz trwałego rozwiązania do utrzymywania plików pamięci podręcznej Pythona z dala od katalogów projektu:
Począwszy od Pythona 3.8 możesz użyć zmiennej środowiskowej
PYTHONPYCACHEPREFIX
do zdefiniowania katalogu pamięci podręcznej dla Pythona.Z dokumentacji Pythona:
Przykład
Jeśli dodasz następujący wiersz do swojego
./profile
w systemie Linux:Python nie utworzy irytujących
__pycache__
katalogów w katalogu twojego projektu, zamiast tego umieści je wszystkie pod~/.cache/cpython/
źródło
Polecenie, którego użyłem:
find . -type d -name "__pycache__" -exec rm -r {} +
Wyjaśnia:
Najpierw znajduje wszystkie
__pycache__
foldery w bieżącym katalogu.Wykonaj,
rm -r {} +
aby usunąć każdy folder w powyższym kroku ({}
oznacza symbol zastępczy i+
zakończenie polecenia)Edytowano 1:
Używam Linuksa, aby ponownie użyć polecenia, które dodałem poniższy wiersz do
~/.bashrc
plikuEdytowano 2: jeśli używasz VS Code , nie musisz usuwać
__pycache__
ręcznie. Możesz dodać poniższy fragment dosettings.json
pliku. Następnie VS Code ukryje wszystkie__pycache__
folderyMam nadzieję, że to pomoże !!!
źródło
Korzystanie z PyCharm
Aby usunąć pliki skompilowane w Pythonie
W oknie
Project Tool Window
kliknij prawym przyciskiem myszy projekt lub katalog, z którego mają zostać usunięte skompilowane pliki Pythona.Z menu kontekstowego wybierz
Clean Python compiled files
.Te
.pyc
pliki znajdujące się na wybranym katalogu są dyskretnie usunięty.źródło
Z katalogu projektu wpisz:
Usuwanie wszystkich plików .pyc
find . -path "*/*.pyc" -delete
Usuwanie wszystkich plików .pyo :
find . -path "*/*.pyo" -delete
Na koniec, aby usunąć wszystkie „__pycache__” , wpisz:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
Jeśli napotkasz błąd odmowy uprawnień , dodaj sudo na początku wszystkich powyższych poleceń.
źródło
Bardzo dziękuję za inne odpowiedzi, na ich podstawie użyłem tego do
prerm
pliku mojego pakietu Debiana :źródło
Dlaczego po prostu nie użyć
rm -rf __pycache__
? Uruchomgit add -A
później, aby usunąć je z repozytorium i dodać__pycache__/
do pliku .gitignore.źródło
Po prostu przejdź do terminala i wpisz:
i zostanie usunięty.
źródło