내가 이해 한 바에 따르면 캐시는 비슷한 파일로 암호화 된 파일입니다.
우리는 무엇을해야합니까 __pycache__
폴더? 소스 코드 대신 사람들에게 제공하는 것입니까? 내 입력 데이터입니까? 이 폴더는 계속 생성됩니다. 무엇을위한 것입니까?
Python 3.8
환경 변수를 사용 하여 성가신 캐시 디렉토리 의 위치 를 변경할 수 있기 때문에 : stackoverflow.com/a/57414308/1612318
내가 이해 한 바에 따르면 캐시는 비슷한 파일로 암호화 된 파일입니다.
우리는 무엇을해야합니까 __pycache__
폴더? 소스 코드 대신 사람들에게 제공하는 것입니까? 내 입력 데이터입니까? 이 폴더는 계속 생성됩니다. 무엇을위한 것입니까?
Python 3.8
환경 변수를 사용 하여 성가신 캐시 디렉토리 의 위치 를 변경할 수 있기 때문에 : stackoverflow.com/a/57414308/1612318
답변:
파이썬에서 프로그램을 실행하면 인터프리터는 먼저 바이트 코드로 컴파일하고 (이것은 지나치게 단순화 된 것입니다) __pycache__
폴더에 저장 합니다. 거기에서 보면 프로젝트 폴더에 .py 파일 이름을 공유하는 많은 파일이 있으며 확장자는 .pyc 또는 .pyo입니다. 이들은 각각 바이트 코드 컴파일 및 최적화 된 바이트 코드 컴파일 버전의 프로그램 파일입니다.
프로그래머는 거의 무시할 수 있습니다 ... 프로그램이 조금 더 빨리 시작하기 만하면됩니다. 스크립트가 변경되면 다시 컴파일되고 파일이나 전체 폴더를 삭제하고 프로그램을 다시 실행하면 해당 동작이 특별히 억제되지 않는 한 다시 나타납니다.
cpython (참조 구현이므로 가장 일반적인)을 사용하고 해당 폴더를 원하지 않는 경우 -B 플래그를 사용하여 인터프리터를 시작하여 억제 할 수 있습니다 (예 :
python -B foo.py
tcaswell이 지적한 또 다른 옵션은 환경 변수 PYTHONDONTWRITEBYTECODE
를 임의의 값 으로 설정하는 것입니다 (python의 man 페이지에 따라 "빈 문자열이 아님").
PYTHONDONTWRITEBYTECODE=<any_value>
를 추가하여 영구적으로 억제 할 수도 있습니다 .
python2
내가 실수하지 않으면 컴파일 된 파일을 원본과 동일한 디렉토리에 넣습니다.
find . -name '*.pyc' -delete
당신이 어떤 xargs를의 shananigans 사용하지 않아도 예, 발견은, 발견 된 파일을 삭제하기위한 플래그가
__pycache__
컴파일되어 실행 준비가 된 Python 3 바이트 코드를 포함하는 폴더 입니다.
정기적으로 이러한 파일을 삭제하거나 개발 중에 생성을 억제하면 성능이 저하 될 수 있으므로 권장하지 않습니다. 바이트 코드가 엣지 경우 부실 수 있으므로 필요할 때 정리하기 위해 재귀 명령을 준비하십시오 (아래 참조).
파이썬 프로그래머는 보통 바이트 코드를 무시합니다. 사실 __pycache__
과 *.pyc
에서 볼 수있는 일반적인 라인입니다 .gitignore
파일. 바이트 코드는 배포 용이 아니며 dis
module을 사용하여 분해 할 수 있습니다 .
OS X를 사용하는 경우 프로젝트의 루트 폴더에서 다음 명령을 실행하여 프로젝트의 모든 폴더를 쉽게 숨길 수 있습니다.
find . -name '__pycache__' -exec chflags hidden {} \;
교체 __pycache__
로 *.pyc
파이썬 2.
그러면 Finder / Textmate 2에게 목록에서 제외하도록 알리는 모든 디렉토리 (.pyc 파일)에 플래그를 설정합니다. 중요하게는 바이트 코드가 있으며 숨겨져 있습니다.
새 모듈을 작성하고 새 바이트 코드를 숨기거나 숨겨진 바이트 코드 파일을 삭제하려면 명령을 다시 실행하십시오.
Windows에서 동등한 명령은 다음과 같습니다 (테스트되지 않음, 배치 스크립트 환영).
dir * /s/b | findstr __pycache__ | attrib +h +s +r
마우스 오른쪽 버튼 클릭> 숨기기를 사용하여 프로젝트 숨기기 폴더를 진행하는 것과 같습니다.
단위 테스트 실행은 *.pyc
파일과 __pycache__
폴더를 삭제하는 것이 실제로 유용한 시나리오 중 하나입니다 (설명에 더 있음) . 나는 내에서 다음 줄을 사용하고 필요할 때 정리하기 위해 ~/.bash_profile
실행 cl
됩니다.
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
__pycache__
당신이 줄을 사용하면 폴더가 생성됩니다 :
import file_name
또는 당신이 만든 다른 파일에서 정보를 얻으려고 노력하십시오. 이렇게하면 다른 파일을 열기 위해 프로그램을 두 번째로 실행할 때 속도가 약간 빨라집니다.
3.7 개 이상의 문서에서 업데이트 된 답변 :
모듈 로딩 속도를 높이기 위해 Python
__pycache__
은 name 아래 디렉토리 에 각 모듈의 컴파일 된 버전을 캐시합니다module.version.pyc
. 여기서 버전은 컴파일 된 파일의 형식을 인코딩합니다. 일반적으로 파이썬 버전 번호를 포함합니다. 예를 들어 CPython 릴리스 3.3에서 컴파일 된 spam.py 버전은로 캐시됩니다__pycache__/spam.cpython-33.pyc
. 이 명명 규칙을 사용하면 다른 릴리스 및 다른 버전의 Python에서 컴파일 된 모듈이 공존 할 수 있습니다.
출처 : https://docs.python.org/3/tutorial/modules.html#compiled-python-files
즉,이 디렉토리는 Python에 의해 생성되며 프로그램 실행 속도를 높이기 위해 존재합니다. 소스 제어에 전념해서는 안되며 로컬 소스 코드와 공존해야합니다.
__pycache__
파이썬에 의해 자동으로 생성되는 바이트 코드 캐시 파일, 즉 컴파일 된 파이썬 또는 파일이 들어있는 디렉토리입니다 .pyc
. "해석 된"언어 인 파이썬에 컴파일 된 파일이 왜 있는지 궁금 할 것입니다. 이 SO 질문 은 그 문제를 해결합니다 ( 그리고이 답변을 읽을 가치가 있습니다 ).
파이썬 문서는 정확히 어떻게 작동하고 왜 존재하는지에 대해 더 깊이있게 들어갑니다.
.pyc
동일한 디렉토리에 파일 을 유지 관리하는 기존 시스템 이 다른 버전의 Python 인터프리터로 프로그램을 실행할 때와 같이 다양한 문제가 발생 했기 때문에 Python 3.2에 추가되었습니다 . 전체 기능 사양은 PEP 3174를 참조하십시오 .공식 파이썬 튜토리얼 모듈에서
모듈 로딩 속도를 높이기 위해 Python
__pycache__
은 name 아래 디렉토리 에 각 모듈의 컴파일 된 버전을 캐시합니다module.version.pyc
. 여기서 버전은 컴파일 된 파일의 형식을 인코딩합니다. 일반적으로 파이썬 버전 번호를 포함합니다. 예를 들어 CPython 릴리스 3.6에서 컴파일 된 spam.py 버전은로 캐시됩니다__pycache__/spam.cpython-36.pyc
.
파이썬 문서 프로그래밍 FAQ에서
모듈을 처음 가져올 때 (또는 현재 컴파일 된 파일이 작성된 후 소스 파일이 변경된 경우) 컴파일 된 코드를 포함하는 .pyc 파일은 파일을 포함하는
__pycache__
디렉토리의 서브 디렉토리에 작성되어야.py
합니다..pyc
파일과 동일한 이름으로 시작하는 파일 이름이됩니다.py
와 파일 및 종료.pyc
를 생성 한 특정 파이썬 바이너리에 따라 중간 구성 요소를.
파이썬 스크립트를 실행하면 바이트 코드가 메모리에 생성되어 프로그램이 종료 될 때까지 유지됩니다. 모듈을 가져 오는 경우 더 빠른 재사용 성을 위해 Python은 가져 오는 모듈의 바이트 코드가 캐시되는 캐시 .pyc (PYC는 'Python' 'Compiled') 파일을 생성합니다. 아이디어는 다시 가져올 때 다시 컴파일 (한 번 컴파일, 여러 번 실행 정책)을 피함으로써 파이썬 모듈의 로딩 속도를 높이는 것입니다.
파일 이름은 모듈 이름과 동일합니다. 초기 점 다음 부분은 캐시를 만든 Python 구현 (CPython 일 수 있음)과 버전 번호를 나타냅니다.
3.2 이상에서 Python은 .pyc 컴파일 된 바이트 코드 파일을 __pycache__
소스 파일이있는 디렉토리 에있는 하위 디렉토리 에 파일을 생성 한 Python 버전을 식별하는 파일 이름 (예 : script.cpython-33.pyc)으로 저장합니다.
이 때 모듈을 가져 ,
import file_name
파이썬은 컴파일 된 바이트 코드를 __pycache__
디렉토리에 저장하여 향후 가져 오기에서 소스를 다시 구문 분석하고 컴파일하지 않고 직접 사용할 수 있습니다.
파일을 가져올 때만 스크립트를 실행하기위한 목적은 아닙니다.
(이전 버전은 캐시 된 바이트 코드를 .py 파일과 같은 디렉토리를 흩 뜨리는 .pyc 파일로 저장하는 데 사용되었지만 Python 3부터는 하위 디렉토리로 이동하여 더 깔끔하게 만들었습니다.)
PYTHONDONTWRITEBYTECODE ---> 이것이 비어 있지 않은 문자열로 설정되면, 파이썬은 소스 모듈을 가져올 때 .pyc 파일을 쓰려고하지 않습니다. -B 옵션을 지정하는 것과 같습니다.