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

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



답변

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

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

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


답변

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 .것이 아주 멋지게 정리되었습니다.


답변

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 프로세스).


답변

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

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

또는 더 간단한 형태,

find . -type d -name __pycache__ -delete

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


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


답변

이것은 파이썬 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 옵션을 지정하는 것과 같습니다.

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

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

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


답변

내가 사용한 명령 :

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
}

희망이 있습니다 !!!