python3 프로젝트에서 모든 __pycache__
폴더와 .pyc/.pyo
파일 을 지우는 가장 좋은 방법은 무엇입니까? 여러 사용자 pyclean
가 데비안과 함께 제공되는 스크립트를 제안 했지만 폴더를 제거하지는 않습니다. 파일을 DVS로 푸시하기 전에 프로젝트를 정리하는 간단한 방법을 원합니다.
python3 프로젝트에서 모든 __pycache__
폴더와 .pyc/.pyo
파일 을 지우는 가장 좋은 방법은 무엇입니까? 여러 사용자 pyclean
가 데비안과 함께 제공되는 스크립트를 제안 했지만 폴더를 제거하지는 않습니다. 파일을 DVS로 푸시하기 전에 프로젝트를 정리하는 간단한 방법을 원합니다.
답변:
다음 명령으로 수동으로 수행 할 수 있습니다.
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
현재 디렉토리에서 모든 * .pyc 파일과 __pycache__ 디렉토리를 재귀 적으로 제거합니다 .
find
아니며 grep
또한 rm
현재 작업 디렉토리에 포함되어 useful.pycle.json
있거나 important_deployment_setting_about__pycache__.txt
등 이있을 수있는 위험 할 수 있습니다 .SO 의 전체 사용자 기반에서 제외하지 않을 것입니다. 이름에 공백이있는 파일에 의해 (위험하게 rm -rf
) 깨진 xargs
것은 말할 것도 없습니다 . 그래서 편집했습니다…
grep: parentheses not balanced
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 .
것이 아주 멋지게 정리되었습니다.
__pycache__
폴더 나 .pyc
파일을 삭제하지 않습니다 (debian에서 테스트)
find
macOS 에서의 BSD 구현은 GNU find와 다릅니다. 이것은 BSD 및 GNU find와 모두 호환됩니다. -name
및 -o
for 또는 - 를 사용하여 globbing 구현으로 시작하십시오. 이 함수를 .bashrc
파일 에 넣으십시오 .
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
그런 다음 cd
재귀 적으로 정리하려는 디렉토리로 이동하여 다음 을 입력하십시오.pyclean
.
이것은 GNU 찾기, 유일한 (예 : Linux) 솔루션이지만 정규 표현식으로 조금 더 좋다고 생각합니다.
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
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
이므로 스크립트에서 해당 버전을 사용한다고 생각합니다.
이것은 Python 3 프로젝트이므로 __pycache__
디렉토리 만 삭제하면됩니다 . 모든 .pyc
/ .pyo
파일은 그 안에 있습니다.
find . -type d -name __pycache__ -exec rm -r {} \+
또는 더 간단한 형태,
find . -type d -name __pycache__ -delete
어떤 이유로 든 효과가 없었습니다 (파일은 삭제되었지만 디렉토리는 그렇지 않았습니다). 그래서 나는 완전성을 위해 둘 다 포함시킵니다.
또는 개정 제어중인 디렉토리에서이 작업을 수행하는 경우 RCS에게 __pycache__
폴더를 재귀 적 으로 무시하도록 지시 할 수 있습니다 . 그런 다음 필요한 순간에 무시 된 모든 파일을 정리하십시오. 아마도 단순한 것보다 정리하는 것이 더 많기 때문에 더 편리 할 것입니다 __pycache__
.
.pyc
파일이 그 안에있는 것은 아닙니다.
Directory not empty
두 번째 변형을 얻는 유일한 사람 입니까?
이것은 파이썬 2 및 파이썬 3과 함께 작동하여 모든 .pyc .pyo
파일과 __pycache__
디렉토리를 재귀 적 으로 제거하는 별칭입니다 .
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'
Python 캐시 파일을 프로젝트 디렉토리에서 유지하기위한 영구적 인 솔루션 이 필요한 경우 :
Python 3.8 부터는 환경 변수 PYTHONPYCACHEPREFIX
를 사용하여 Python의 캐시 디렉토리를 정의 할 수 있습니다 .
파이썬 문서에서 :
이것이 설정되면, 파이썬은 소스 트리 내의 pycache 디렉토리 대신이 경로의 미러 디렉토리 트리에 .pyc 파일을 작성합니다 . 이것은 -X pycache_prefix = PATH 옵션을 지정하는 것과 같습니다.
예
./profile
Linux에서 다음 줄을 추가하면 :
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
파이썬은 __pycache__
프로젝트 디렉토리에 성가신 디렉토리를 만들지 않고 대신 모든 디렉토리를 배치합니다~/.cache/cpython/
내가 사용한 명령 :
find . -type d -name "__pycache__" -exec rm -r {} +
설명합니다 :
먼저 __pycache__
현재 디렉토리에서 모든 폴더를 찾습니다 .
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
}
희망이 있습니다 !!!
다른 답변에 감사드립니다.이를 기반으로 데비안 패키지 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
터미널로 가서 다음을 입력하십시오.
$rm __pycache__
제거됩니다.
*__pycache__
,*.pyc*
그것은 파일과 디렉토리를 구분하지 않습니다. 생성 된rm
명령의 대부분 도 불필요합니다.