Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 바이트코드(.pyc) 파일을 생성하는 다양한 방법

파이썬 바이트코드 파일 생성 방법 개요

모든 파이썬 프로그램은 실행되기 전에 소스 코드를 자동으로 컴파일하여 바이트코드(byte code)라고 불리는 중간 코드를 생성합니다. 이 과정은 파이썬 인터프리터가 내부적으로 수행하며, 사용자가 별도로 지시하지 않아도 이루어집니다.

모듈을 처음 임포트(import)하거나, 소스 파일이 새로 생성되었거나 기존 파일이 수정된 경우에는 컴파일된 결과물인 .pyc 파일이 만들어집니다. 파이썬 3부터는 이 파일이 .py 파일과 같은 디렉터리가 아닌 __pycache__라는 하위 디렉터리에 저장됩니다.

이러한 메커니즘은 시간 절약을 위한 장치입니다. 이미 컴파일된 바이트코드가 있으면, 다음에 프로그램을 실행할 때 컴파일 단계를 건너뛰고 더 빠르게 실행할 수 있기 때문입니다.

.pyc 파일이 생성되지 않는 경우

임포트 없이 단독으로 실행되는 스크립트에는 .pyc 파일이 생성되지 않습니다. 예를 들어, 어떤 스크립트(file1.py)가 다른 파일(file2.py)을 임포트한다면, file1.py 자체에 대해서는 .pyc 파일이 만들어지지 않습니다.

1. 모듈 임포트로 .pyc 파일 생성하기

.pyc 파일을 만드는 가장 간단한 방법은 해당 모듈을 임포트하는 것입니다. 예를 들어 MainP.py라는 모듈이 있다면 다음과 같이 실행합니다.

>>> import MainP
>>>

모듈이 임포트되는 순간 자동으로 컴파일되어 __pycache__ 폴더 안에 .pyc 파일이 생성됩니다.

2. py_compile 모듈로 수동 컴파일하기

임포트되지 않는 모듈의 .pyc 파일을 만들고 싶다면 py_compile 모듈을 사용해야 합니다. 이 모듈은 특정 모듈을 수동으로 컴파일할 수 있는 기능을 제공하며, py_compile.compile() 함수를 통해 대화형으로도 사용할 수 있습니다.

>>> import py_compile
>>> py_compile.compile('test.py')
'__pycache__\\test.cpython-36.pyc'
>>>

위 문장을 파이썬 셸에서 실행하면 __pycache__ 폴더(파이썬 3) 안에 .pyc 파일이 생성됩니다. 구버전 파이썬에서는 test.py 파일과 같은 위치에 생성됩니다.

여러 파일을 한 번에 컴파일하기

여러 개의 파일을 동시에 컴파일하고 싶다면 py_compile.main() 함수를 사용하면 됩니다.

>>> # 여러 파일을 한 번에 컴파일
>>> py_compile.main(['test1.py', 'test2.py', 'test_sample1.py', 'test_sample2.py'])
0

실행 결과 네 개의 서로 다른 컴파일된 파일이 각각 생성된 것을 확인할 수 있습니다.

3. compileall 모듈로 폴더 전체 컴파일하기

특정 폴더 안의 모든 파일을 한꺼번에 컴파일하려면 compileall.compile_dir() 함수를 사용합니다.

>>> # 특정 폴더의 모든 .py 파일 컴파일
>>> import compileall
>>> compileall.compile_dir('gmplot')
Listing 'gmplot'...
Compiling 'gmplot\\__init__.py'...
Compiling 'gmplot\\color_dicts.py'...
Compiling 'gmplot\\gmplot.py'...
Compiling 'gmplot\\google_maps_templates.py'...
Compiling 'gmplot\\setup.py'...
True

컴파일이 완료되면 '폴더명\__pycache__' 경로 안에 .pyc 파일들이 생성됩니다.

4. 명령줄에서 compileall 실행하기

디렉터리 하나 또는 여러 디렉터리에 있는 모든 파일을 컴파일하려면 명령 프롬프트에서 compileall 옵션을 사용하면 됩니다.

C:\Users\rajesh>python -m compileall
Compiling 'C:\\Python\\Python361\\BeautifulSoup_script1.py'...
Compiling 'C:\\Python\\Python361\\EDA_python1.py'...
Compiling 'C:\\Python\\Python361\\MainP.py'...
Compiling 'C:\\Python\\Python361\\NegativeAgeException.py'...
...

명령 실행 후 __pycache__ 디렉터리 안에서 해당 폴더의 모든 파일에 대한 .pyc 파일이 생성된 것을 확인할 수 있습니다.

정리

파이썬에서 바이트코드 파일을 생성하는 방법은 크게 네 가지입니다.

  • 모듈 임포트: 가장 간단한 방법으로, 임포트 시 자동으로 .pyc 파일 생성
  • py_compile.compile(): 단일 파일을 수동으로 컴파일
  • py_compile.main(): 여러 파일을 한 번에 컴파일
  • compileall.compile_dir() 또는 python -m compileall: 폴더 전체를 일괄 컴파일

상황에 맞는 방법을 선택하면 배포용 코드 준비나 실행 속도 최적화에 유용하게 활용할 수 있습니다.