[python] __pycache__는 무엇입니까?

내가 이해 한 바에 따르면 캐시는 비슷한 파일로 암호화 된 파일입니다.

우리는 무엇을해야합니까 __pycache__폴더? 소스 코드 대신 사람들에게 제공하는 것입니까? 내 입력 데이터입니까? 이 폴더는 계속 생성됩니다. 무엇을위한 것입니까?



답변

파이썬에서 프로그램을 실행하면 인터프리터는 먼저 바이트 코드로 컴파일하고 (이것은 지나치게 단순화 된 것입니다) __pycache__폴더에 저장 합니다. 거기에서 보면 프로젝트 폴더에 .py 파일 이름을 공유하는 많은 파일이 있으며 확장자는 .pyc 또는 .pyo입니다. 이들은 각각 바이트 코드 컴파일 및 최적화 된 바이트 코드 컴파일 버전의 프로그램 파일입니다.

프로그래머는 거의 무시할 수 있습니다 … 프로그램이 조금 더 빨리 시작하기 만하면됩니다. 스크립트가 변경되면 다시 컴파일되고 파일이나 전체 폴더를 삭제하고 프로그램을 다시 실행하면 해당 동작이 특별히 억제되지 않는 한 다시 나타납니다.

cpython (참조 구현이므로 가장 일반적인)을 사용하고 해당 폴더를 원하지 않는 경우 -B 플래그를 사용하여 인터프리터를 시작하여 억제 할 수 있습니다 (예 :

python -B foo.py

tcaswell이 지적한 또 다른 옵션은 환경 변수 PYTHONDONTWRITEBYTECODE를 임의의 값 으로 설정하는 것입니다 (python의 man 페이지에 따라 “빈 문자열이 아님”).


답변

__pycache__컴파일되어 실행 준비가 된 Python 3 바이트 코드를 포함하는 폴더 입니다.

정기적으로 이러한 파일을 삭제하거나 개발 중에 생성을 억제하면 성능이 저하 될 수 있으므로 권장하지 않습니다. 바이트 코드가 엣지 경우 부실 수 있으므로 필요할 때 정리하기 위해 재귀 명령을 준비하십시오 (아래 참조).

파이썬 프로그래머는 보통 바이트 코드를 무시합니다. 사실 __pycache__*.pyc에서 볼 수있는 일반적인 라인입니다 .gitignore파일. 바이트 코드는 배포 용이 아니며 dismodule을 사용하여 분해 할 수 있습니다 .


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 일 수 있음)과 버전 번호를 나타냅니다.


답변

파이썬 인터프리터는 * .py 스크립트 파일을 컴파일하고 컴파일 결과를 __pycache__디렉토리에 저장합니다 .

프로젝트가 다시 실행될 때 인터프리터가 * .py 스크립트가 수정되지 않았다고 식별하면 컴파일 단계를 건너 뛰고 __pycache__폴더에 저장된 이전에 생성 된 * .pyc 파일을 실행 합니다.

프로젝트가 복잡한 경우 프로젝트를 실행하기 전에 준비 시간을 단축 할 수 있습니다. 프로그램이 너무 작 으면 옵션 python -B abc.py과 함께 사용하여이를 무시할 수 있습니다 B.