Python3 프로젝트는 __pycache__ 폴더 및 .pyc 파일을 제거합니다.


166

python3 프로젝트에서 모든 __pycache__ 폴더와 .pyc/.pyo파일 을 지우는 가장 좋은 방법은 무엇입니까? 여러 사용자 pyclean가 데비안과 함께 제공되는 스크립트를 제안 했지만 폴더를 제거하지는 않습니다. 파일을 DVS로 푸시하기 전에 프로젝트를 정리하는 간단한 방법을 원합니다.

답변:


241

다음 명령으로 수동으로 수행 할 수 있습니다.

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

현재 디렉토리에서 모든 * .pyc 파일과 __pycache__ 디렉토리를 재귀 적으로 제거합니다 .


8
명령이 더럽습니다. 또한 삭제됩니다 *__pycache__, *.pyc*그것은 파일과 디렉토리를 구분하지 않습니다. 생성 된 rm명령의 대부분 도 불필요합니다.
ivan_pozdeev

12
이것은 단지 잘못이다. 그것은 당신이 사용하는 방법이 find아니며 grep또한 rm현재 작업 디렉토리에 포함되어 useful.pycle.json있거나 important_deployment_setting_about__pycache__.txt등 이있을 수있는 위험 할 수 있습니다 .SO 의 전체 사용자 기반에서 제외하지 않을 것입니다. 이름에 공백이있는 파일에 의해 (위험하게 rm -rf) 깨진 xargs것은 말할 것도 없습니다 . 그래서 편집했습니다…
dlamblin

@ dwanderson 나는 당신이 다른 대답에 대해 이야기하고 있다고 생각합니다. 또는 SO 편집 기록에 더 이상 전체 기록이 표시되지 않습니다. EG 2017에 버전이 표시되지 않았습니까?
dlamblin

2
OSX에 작동하지 않습니다grep: parentheses not balanced
Daniel W.

85

pyclean을 pycclean으로 잘못 입력했을 때 스스로 답을 찾았습니다.

    No command 'pycclean' found, did you mean:
     Command 'py3clean' from package 'python3-minimal' (main)
     Command 'pyclean' from package 'python-minimal' (main)
    pycclean: command not found

달리는 py3clean .것이 아주 멋지게 정리되었습니다.


6
py3clean은 @ V.Gamula의 명령보다 보수적입니다. 이후 삭제 된 소스 파일에서 생성 된 .pyc 파일은 삭제하지 않습니다.
Jérôme

1
2017 년 5 월 현재 macos / homebrew에서 pip의 pycleaner 패키지를 사용해야했고 그것을 실행하는 명령은 pycleaner입니다. 파이썬 2 만.
Willian Mitsuda 17 년

3
python3-minimal은 데비안에서만 사용할 수있는 것 같습니다 (RHEL, CentOS, brew, MacOS에서는 찾을 수 없음)
user12345

1
이상하게도, 설치된 py3clean (3.5.1-3)은 실제로 아무것도하지 않고 해당 파일을 지우지 않고 단순히 자동으로 반환합니다 (python 3.6.5).
matanster

4
__pycache__폴더 나 .pyc파일을 삭제하지 않습니다 (debian에서 테스트)
EricLavault

82

macOS 및 Linux

findmacOS 에서의 BSD 구현은 GNU find와 다릅니다. 이것은 BSD 및 GNU find와 모두 호환됩니다. -name-ofor 또는 - 를 사용하여 globbing 구현으로 시작하십시오. 이 함수를 .bashrc파일 에 넣으십시오 .

pyclean () {
    find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}

그런 다음 cd재귀 적으로 정리하려는 디렉토리로 이동하여 다음 을 입력하십시오.pyclean .

GNU 찾기 전용

이것은 GNU 찾기, 유일한 (예 : Linux) 솔루션이지만 정규 표현식으로 조금 더 좋다고 생각합니다.

pyclean () {
    find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}

Python 3을 사용하는 모든 플랫폼

Windows의 경우조차 없을 것 find입니다. 그러나 3.4에서 시작하는 편리한 pathlib모듈 이있는 Python 3이있을 수 있습니다 .

python3 -Bc "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -Bc "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"

-B플래그는 작성하지 파이썬을 알려줍니다 .pyc파일. (또한 참조PYTHONDONTWRITEBYTECODE 환경 변수 .)

위의 남용은 루핑에 대한 이해를 나열하지만을 사용할 때 python -c스타일은 오히려 두 번째 관심사입니다. 또는 우리는 (예를 들어) 남용 할 수 있습니다 __import__.

python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"

답의 비판

가장 많이 사용 된 답변은 다음과 같습니다.

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

세 가지 프로세스를 사용하기 때문에 효율성이 떨어지는 것 같습니다. find정규 표현식을 사용하므로 별도의 호출이 필요하지 않습니다 grep. 마찬가지로, -delete따라서 별도의 호출이 필요하지 않으며 rm여기에 주석과 달리 비어 있지 않은 디렉토리는 정규 표현식 일치로 인해 비워지는 한 삭제 됩니다 .

로부터 xargs매뉴얼 페이지

find /tmp -depth -name core -type f -delete

/ tmp 디렉토리에서 또는 아래에서 core라는 파일을 찾아 삭제하지만 이전 예제보다 효율적입니다 (fork (2) 및 exec (2)를 사용하여 rm을 시작할 필요가 없기 때문에 추가 xargs 프로세스).


당신은 아마 사용하여 한 줄에 파이썬 버전을 얻을 수있는 shutil.rmtee__pycache__대신 먼저 비우는의 디렉토리; 하나의 라이너는 쉬운 별칭을 위해 좋습니다. 하지만 지금은 열렬한 팬 Path이므로 스크립트에서 해당 버전을 사용한다고 생각합니다.
Nathan

25

이것은 Python 3 프로젝트이므로 __pycache__디렉토리 만 삭제하면됩니다 . 모든 .pyc/ .pyo파일은 그 안에 있습니다.

find . -type d -name __pycache__ -exec rm -r {} \+

또는 더 간단한 형태,

find . -type d -name __pycache__ -delete

어떤 이유로 든 효과가 없었습니다 (파일은 삭제되었지만 디렉토리는 그렇지 않았습니다). 그래서 나는 완전성을 위해 둘 다 포함시킵니다.


또는 개정 제어중인 디렉토리에서이 작업을 수행하는 경우 RCS에게 __pycache__폴더를 재귀 적 으로 무시하도록 지시 할 수 있습니다 . 그런 다음 필요한 순간에 무시 된 모든 파일을 정리하십시오. 아마도 단순한 것보다 정리하는 것이 더 많기 때문에 더 편리 할 것입니다 __pycache__.


아니요, 모든 .pyc파일이 그 안에있는 것은 아닙니다.
Martin Thoma

@ V.Gamula 이것은 ~ 114 명이 운이 좋았을 때보 다 훨씬 안전한 명령으로, 실수로 경기를 영구적으로 삭제 한 후 물지 않았습니다.
dlamblin

python3 전용 프로젝트의 @MartinThoma?
dlamblin

4
나는 Directory not empty두 번째 변형을 얻는 유일한 사람 입니까?
matanster

13

이것은 파이썬 2 및 파이썬 3과 함께 작동하여 모든 .pyc .pyo파일과 __pycache__디렉토리를 재귀 적 으로 제거하는 별칭입니다 .

alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'

고마워 그것은 내 repos에 필요한 모든 불필요한 파일을 제거하는 데 도움이되었습니다.
Harsh Aggarwal

13

Python 캐시 파일을 프로젝트 디렉토리에서 유지하기위한 영구적 인 솔루션 이 필요한 경우 :

Python 3.8 부터는 환경 변수 PYTHONPYCACHEPREFIX를 사용하여 Python의 캐시 디렉토리를 정의 할 수 있습니다 .

파이썬 문서에서 :

이것이 설정되면, 파이썬은 소스 트리 내의 pycache 디렉토리 대신이 경로의 미러 디렉토리 트리에 .pyc 파일을 작성합니다 . 이것은 -X pycache_prefix = PATH 옵션을 지정하는 것과 같습니다.

./profileLinux에서 다음 줄을 추가하면 :

export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"

파이썬은 __pycache__프로젝트 디렉토리에 성가신 디렉토리를 만들지 않고 대신 모든 디렉토리를 배치합니다~/.cache/cpython/


4
다가오는 세상에 감사합니다 pycache의 쓰레기 디렉토리는 실수였다.
사라 G

7

내가 사용한 명령 :

find . -type d -name "__pycache__" -exec rm -r {} +

설명합니다 :

  1. 먼저 __pycache__현재 디렉토리에서 모든 폴더를 찾습니다 .

  2. rm -r {} +위의 단계에서 각 폴더를 삭제하려면 실행하십시오 ( {} 자리 표시자를 +나타내고 명령을 종료하십시오)

편집 1 :

나는 리눅스를 사용하고 있는데, 명령을 재사용하기 위해 아래 줄을 ~/.bashrc파일에 추가했다.

alias rm-pycache='find . -type d -name  "__pycache__" -exec rm -r {} +'

편집 2 : VS Code를 사용하는 경우 __pycache__수동으로 제거 할 필요가 없습니다 . 아래의 스 니펫을 settings.json파일에 추가 할 수 있습니다 . 그 후 VS 코드 는 모든 __pycache__폴더를 숨 깁니다.

"files.exclude": {
     "**/__pycache__": true
}

희망이 있습니다 !!!


4

PyCharm 사용

Python 컴파일 파일을 제거하려면

  1. 에서 Project Tool Window, 파이썬 컴파일 된 파일에서 삭제해야합니다 프로젝트 또는 디렉터리를 마우스 오른쪽 단추로 클릭합니다.

  2. 상황에 맞는 메뉴에서을 선택합니다 Clean Python compiled files.

.pyc선택한 디렉토리에있는 파일이 자동으로 삭제됩니다.


4

프로젝트 디렉토리에서 다음을 입력하십시오.

모든 .pyc 파일 삭제

find . -path "*/*.pyc" -delete

모든 .pyo 파일 삭제 :

find . -path "*/*.pyo" -delete

마지막으로 모든 '__pycache__' 를 삭제하려면 다음을 입력하십시오.

find . -path "*/__pycache__" -type d -exec rm -r {} ';'

권한 거부 오류 가 발생 하면 위의 모든 명령을 시작할 때 sudo 를 추가하십시오 .


2

다른 답변에 감사드립니다.이를 기반으로 데비안 패키지 prerm파일에 사용한 것입니다.

#!/bin/sh
set -e

deb_package='package-name'
python_package='package_name'

if which pyclean >/dev/null 2>&1; then
    py3clean -p $deb_package
else
    dpkg -L $deb_package | grep ${python_package}$ | while read file
    do
        find ${file} -type d -name __pycache__ -exec rm -r {} \+
    done
fi

0

왜 사용하지 rm -rf __pycache__않습니까? git add -A나중에 실행 하여 저장소에서 제거하고 __pycache__/.gitignore 파일에 추가 하십시오.


1
그는 이것을 수동으로하지 않습니다. 그는 데비안 패키지에 사용 된 스크립트에 추가하려고합니다. 데비안 패키지는 git과 함께 사용되지 않지만 데비안 패키지 관리자 나 apt 설치 프로그램과 함께 사용됩니다.
Craig

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.