Skip to content

Python의 pycache 완벽 이해: 알아야 할 모든 것

Updated on

Python 스크립트를 실행해 본 적이 있다면, 프로젝트 안에 __pycache__라는 폴더가 생성되는 것을 본 적이 있을 수 있습니다. 겉보기에 중요하지 않아 보일 수 있지만, 이 폴더는 Python이 프로그램을 효율적으로 실행하는 데 중요한 역할을 합니다. 이 가이드에서는 __pycache__ 폴더가 무엇인지, Python이 왜 이를 생성하는지, 그리고 이를 어떻게 안전하게 관리하거나 삭제할 수 있는지 설명합니다.

Python은 인터프리터 언어이지만, 매번 실행할 때마다 모든 .py 파일을 처음부터 다시 해석하지는 않습니다. 대신 Python은 소스 코드를 바이트코드(bytecode) 라는 가벼운 저수준 표현으로 컴파일한 뒤 더 빠르게 실행합니다. 이렇게 컴파일된 바이트코드 파일(.pyc 확장자)은 __pycache__ 폴더 안에 저장됩니다.

Python Pandas Dataframe에서 코드를 작성하지 않고 빠르게 Data Visualization을 만들고 싶으신가요?

PyGWalker는 Visualization 기반의 Exploratory Data Analysis를 위한 Python 라이브러리입니다.
PyGWalker (opens in a new tab)는 pandas 또는 polars dataframe을 Jupyter Notebook 안에서 바로 Tableau와 비슷한 인터페이스로 변환해 줍니다.

PyGWalker for Data visualization (opens in a new tab)


Python에서 pycache란 무엇인가?

__pycache__ 폴더는 Python이 모듈을 실행할 때 자동으로 생성됩니다. 이 안에는 .py 파일을 컴파일한 바이트코드 버전인 .pyc 파일이 저장됩니다.

바이트코드는 더 빠른 실행을 위해 설계되었습니다. 스크립트를 실행할 때 Python은 최신 .pyc 파일을 찾습니다.

  • 존재하고 현재 소스 코드와 일치하는 경우 → Python은 .pyc 파일을 바로 로드합니다.
  • 그렇지 않은 경우 → Python은 소스 코드를 다시 컴파일하고, 새로운 .pyc 파일을 생성해 __pycache__에 저장합니다.

파일 이름이 module.cpython-310.pyc처럼 보이는 이유

최신 Python은 인터프리터 태그(예: cpython-311)를 포함해 여러 Python 버전이 충돌 없이 공존할 수 있도록 합니다.

이는 특히 아래 상황에서 중요합니다.

  • 가상 환경을 사용할 때
  • 시스템 Python과 별도의 환경용 Python을 함께 사용할 때
  • pyenv, conda, Docker 이미지 같은 도구를 사용할 때

pycache 폴더는 어디에 위치하는가?

__pycache__ 폴더는 실행되는 Python 모듈이 있는 디렉터리와 같은 위치에 생성됩니다.

예시 구조:

my_project/
    main.py
    utils.py
    __pycache__/
        main.cpython-311.pyc
        utils.cpython-311.pyc

다른 디렉터리에서 모듈을 임포트하면, 그 디렉터리에도 자체 __pycache__가 생성됩니다.

가상 환경에서

가상 환경 내부에는 설치된 패키지들 때문에 많은 __pycache__ 폴더가 존재하는 것이 일반적입니다. 이는 정상이며, 패키지가 처음 임포트될 때 .pyc 파일이 생성되기 때문입니다.


pycache는 어떻게 Python 스크립트를 빠르게 만드는가?

일반적으로 Python 스크립트를 실행하려면 다음 단계가 필요합니다.

  1. 소스 코드 텍스트를 파싱
  2. 추상 구문 트리(AST) 생성
  3. AST를 바이트코드로 컴파일
  4. 바이트코드 실행

최신 .pyc 파일을 찾으면 Python은 1–3단계를 건너뜁니다. 따라서:

  • 첫 실행은 약간 느릴 수 있고
  • 이후 실행은 (특히 큰 코드베이스에서) 더 빨라집니다.

Hash 기반 pyc 파일(PEP 552)

최신 Python은 다음 두 가지 방식을 지원합니다.

  • 타임스탬프 기반 .pyc (기본 방식)
  • Hash 기반 .pyc (재현 가능한 빌드, 패키징, Docker 이미지용)

이를 통해 자동화 또는 컨테이너 환경에서 바이트코드 생성이 더 안정적으로 이루어집니다.


pycache 폴더를 삭제해도 될까?

네 — __pycache__를 삭제해도 안전합니다.

Python은 스크립트를 다시 실행하는 순간 자동으로 폴더를 재생성합니다. 유일한 단점은: 다시 컴파일해야 하므로 다음 실행이 약간 느려질 수 있다는 점입니다.

모든 __pycache__ 폴더를 재귀적으로 삭제하려면:

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

pycache를 삭제하는 일반적인 상황

  • 임포트 관련 문제를 디버깅할 때
  • 모듈 이름이나 위치를 변경한 후
  • 배포를 위한 패키징 전에
  • Git 커밋 또는 Docker 빌드 전에 불필요한 파일을 줄이고 싶을 때

pycache 파일 생성 자체를 비활성화하려면?

환경 변수를 설정해 .pyc 생성을 막을 수 있습니다.

export PYTHONDONTWRITEBYTECODE=1

이 값이 설정되면:

  • Python은 더 이상 .pyc 파일을 생성하지 않으며
  • __pycache__ 폴더도 생성되지 않습니다.

이 설정은 다음과 같은 경우에 자주 사용됩니다.

  • Docker 이미지에서 레이어 크기를 줄이고 싶을 때
  • CI 파이프라인에서
  • 성능이 중요하지 않은 작은 스크립트에서

이 설정을 영구적으로 적용하려면 ~/.bashrc 같은 쉘 설정 파일에 추가하면 됩니다.


Git에서 pycache 파일을 무시하는 방법

.pyc 파일은 머신마다 다르고 자동으로 생성되기 때문에, 버전 관리 시스템에 저장하지 않는 것이 좋습니다.

.gitignore에 다음 내용을 추가하세요.

__pycache__/
*.pyc

*.pyc 규칙은 선택 사항이지만, 예전 Python 버전처럼 .py 파일 옆에 .pyc를 생성하는 경우에 유용합니다.


pycache 폴더를 삭제하면 어떻게 되는가?

아무 문제도 발생하지 않습니다. 스크립트는 정상적으로 실행됩니다.

Python은 다음 순서로 동작합니다.

  1. .pyc가 없음을 감지하고
  2. .py 파일을 다시 컴파일한 뒤
  3. __pycache__ 디렉터리와 .pyc 파일을 다시 생성합니다.

오직 삭제 이후 첫 실행만 약간 느릴 수 있습니다.


FAQ

1. Python에서 __pycache__ 폴더의 목적은 무엇인가요?

이 폴더는 컴파일된 .pyc 바이트코드 파일을 저장하며, 이를 통해 이후 실행 시 Python이 더 빠르게 시작할 수 있습니다.

2. __pycache__ 폴더를 삭제해도 되나요?

네, 삭제해도 안전합니다. Python은 스크립트를 다시 실행할 때 자동으로 재생성합니다.

3. Git에서 __pycache__ 파일을 무시하려면 어떻게 해야 하나요?

.gitignore에 다음 내용을 추가하세요.

__pycache__/
*.pyc