Skip to content
튜토리얼
Python
파이썬에서 pycache 이해하기: 알아야 할 모든 것

파이썬에서 pycache 이해하기: 알아야 할 모든 것

파이썬 스크립트를 실행해본 적이 있다면 프로젝트 디렉토리에 생성되는 특이한 폴더를 본 적이 있을 것입니다. 이 폴더는 __pycache__라고 이름이 지어져 있는데, 처음에는 신비로워 보일 수 있지만, 파이썬이 스크립트를 실행하는 방법에 중요한 역할을 합니다. 이 글에서는 __pycache__ 폴더에 대해 분석하여 목적, 동작 방식, 그리고 파이썬 프로젝트에서 효율적으로 관리하는 방법을 설명하겠습니다.

파이썬은 소스 코드를 컴퓨터가 이해하고 실행할 수 있는 형식으로 변환하는 인터프리터 언어입니다. 특히 대용량 스크립트의 경우, 이 변환 과정은 시간이 걸릴 수 있습니다. 이러한 과정을 가속화하기 위해, 파이썬은 .pyc 파일 형식으로 변환된 코드를 __pycache__ 폴더에 저장합니다. 이러한 파일들은 파이썬이 원본 소스 코드보다 훨씬 빠르게 실행할 수 있는 바이트 코드 형식입니다.

파이썬 Pandas 데이터프레임으로 빠르게 데이터 시각화를 만들어보세요.

PyGWalker는 시각적 탐색을 위한 테이블 스타일의 유저 인터페이스로, 파이썬 라이브러리인 PyGWalker (opens in a new tab)입니다.

데이터 시각화를 위한 PyGWalker (opens in a new tab)

파이썬에서 pycache란 무엇인가요?

__pycache__ 폴더는 파이썬 스크립트를 실행할 때 생기는 디렉토리입니다. 이 폴더에는 파이썬 스크립트의 컴파일된 버전인 .pyc 파일들이 포함되어 있습니다. 이 파일들은 파이썬 인터프리터에서 실행할 수 있는 낮은 수준의 지시어인 바이트 코드 형식입니다.

파이썬 스크립트를 실행할 때, 인터프리터는 먼저 __pycache__ 폴더에 해당하는 .pyc 파일이 있는지 검사합니다. 만약 있다면, 그리고 .pyc 파일이 최신 상태라면, 파이썬은 원본 스크립트 대신에 이 파일을 실행합니다. 이는 바이트 코드를 실행하는 것이 소스 코드를 해석하는 것보다 훨씬 빠르기 때문입니다.

하지만, .pyc 파일이 오래된 경우(즉, .pyc 파일이 생성된 이후에 소스 스크립트가 수정되었거나, .pyc 파일이 존재하지 않는 경우), 파이썬은 스크립트를 재컴파일하고 __pycache__ 폴더에 새로운 .pyc 파일을 업데이트하거나 생성합니다.

pycache 폴더는 어디에 위치하나요?

__pycache__ 폴더는 실행되는 파이썬 스크립트와 동일한 디렉토리에 위치합니다. 예를 들어, my_project라는 디렉토리에 main.py라는 스크립트가 있다면, main.py를 실행하면 my_project 디렉토리에 __pycache__ 폴더가 생성됩니다.

__pycache__ 폴더 내부에는 상위 디렉토리에서 실행된 각 파이썬 스크립트에 해당하는 .pyc 파일들이 있습니다. 이 파일들의 이름은 원본 스크립트의 이름과 동일하지만 .py 대신 .pyc로 확장자가 바뀝니다.

pycache는 파이썬 스크립트 실행 속도를 어떻게 높이나요?

__pycache__ 폴더와 그 안에 있는 .pyc 파일들은 바이트 코드를 저장함으로써 파이썬 스크립트의 실행 속도를 높이는 데 도움을 줍니다. 바이트 코드는 스크립트의 사전 컴파일 버전으로, 원본 소스 코드보다 파이썬이 더 빨리 실행할 수 있도록 해주는 저수준 형식입니다.

파이썬 스크립트를 실행할 때, 인터프리터는 소스 코드를 구문 분석하여 추상 구문 트리(Abstract Syntax Tree, AST)로 변환하고, 이 AST를 바이트 코드로 컴파일해야 합니다. 이러한 과정은 대용량 스크립트의 경우 시간이 걸릴 수 있습니다.

pycache 폴더를 삭제할 수 있나요?

네, __pycache__ 폴더를 삭제할 수 있습니다. 이 폴더를 삭제하더라도 파이썬 스크립트의 실행에는 영향을 주지 않습니다. 그러나 스크립트를 다음에 실행할 때마다, 파이썬은 바이트 코드로 다시 컴파일해야 하기 때문에 초기 실행 속도가 약간 느려질 수 있습니다. 이는 파이썬이 __pycache__ 폴더와 그 안에 있는 .pyc 파일을 다시 생성해야 하기 때문입니다.

__pycache__ 폴더가 프로젝트 디렉토리를 지저분하게 하는 것에 대해 걱정된다면, 다음 명령어를 사용하여 모든 __pycache__ 폴더를 재귀적으로 삭제할 수 있습니다. 다음과 같이하면 됩니다.

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

이 명령어는 현재 디렉토리와 하위 디렉토리에서 __pycache__라는 이름의 모든 디렉토리를 찾아 삭제합니다.

파이썬에서 pycache 파일 생성 비활성화하는 방법은 무엇인가요?

__pycache__ 폴더와 그 안에 있는 .pyc 파일은 파이썬 스크립트의 실행 속도를 높일 수 있지만, 상황에 따라 .pyc 파일 생성을 비활성화하고 싶을 수도 있습니다. 예를 들어, 컴파일 시간이 무시할 정도로 작은 스크립트에서 작업하거나, __pycache__ 폴더가 프로젝트 디렉토리를 지저분하게 만들고 싶지 않을 수도 있습니다.

PYTHONDONTWRITEBYTECODE 환경 변수를 설정함으로써 __pycache__ 폴더와 .pyc 파일의 생성을 비활성화할 수 있습니다. 다음 명령어를 터미널에서 실행하여 직접 설정할 수 있습니다.

export PYTHONDONTWRITEBYTECODE=1

이 명령어를 실행한 후, 파이썬은 현재 터미널 세션 종료까지 __pycache__ 폴더와 .pyc 파일을 생성하지 않습니다. 이 변경 사항을 영구적으로 적용하려면, 위의 줄을 쉘의 시작 파일(e.g., .bashrc 또는 .bash_profile)에 추가하면 됩니다.

Git에서 pycache 파일을 무시하는 방법은 무엇인가요?

Git으로 작업을 할 때, 버전 관리할 필요가 없는 특정 파일이나 디렉토리를 무시하는 것은 일반적입니다. __pycache__ 디렉토리는 기계에 맞춰진 컴파일된 바이트코드를 포함하고 있기 때문에 다른 환경간에 공유할 필요가 없으므로 이에 대한 무시는 이상적입니다.

__pycache__ 디렉토리를 Git에서 무시하려면 .gitignore 파일에 다음 라인을 추가하면 됩니다:

__pycache__/

이 라인은 Git에게 모든 __pycache__ 디렉토리를 무시하라고 알려줍니다. 이제 git status를 실행하면 __pycache__ 디렉토리와 내용이 추적되지 않은 파일로 나열되지 않는 것을 볼 수 있습니다.

pycache 폴더를 삭제하면 어떤 일이 발생하나요?

__pycache__ 폴더를 삭제해도 Python 스크립트 실행에 영향을 미치지 않습니다. __pycache__ 폴더는 Python 스크립트를 실행하는 데 필요하지 않으며, 이전에 실행된 스크립트의 실행 속도를 빠르게 해주는 역할만 합니다.

__pycache__ 폴더를 삭제한 후 Python 스크립트를 실행하면, Python은 스크립트를 바이트코드로 다시 컴파일하고 __pycache__ 폴더와 해당하는 .pyc 파일을 재생성합니다. 이 과정은 스크립트의 초기 실행 속도를 약간 느리게 할 수 있지만, 이후의 실행은 .pyc 파일에 저장된 바이트코드를 사용할 수 있기 때문에 더 빠릅니다.


이제 Python에서 __pycache__에 관해 자주 묻는 질문에 답해보겠습니다.

FAQ

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

__pycache__ 폴더는 스크립트를 실행할 때 Python이 생성합니다. 이 폴더는 Python 스크립트의 컴파일된 버전인 .pyc 파일을 포함합니다. 이 파일들은 Python이 원래 소스 코드보다 빠르게 실행할 수 있는 바이트코드 형식으로 되어 있습니다.

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

네, __pycache__ 폴더를 삭제해도 됩니다. 이 폴더를 삭제해도 Python 스크립트의 실행에는 영향을 미치지 않습니다. 하지만 다음에 스크립트를 실행할 때 Python은 스크립트를 바이트코드로 다시 컴파일해야 하므로 초기 실행이 약간 느려질 수 있습니다.

  1. Git에서 __pycache__ 파일을 무시하는 방법은 무엇인가요?

Git에서 __pycache__ 디렉토리를 무시하려면 .gitignore 파일에 다음 라인을 추가하면 됩니다: __pycache__/. 이는 Git에게 프로젝트의 어디에 위치하든 __pycache__ 디렉토리를 모두 무시하라고 알려줍니다.