파이썬 파일 확장자의 모든 것
오늘 동료가 .pyd 파일을 건네며 데이터 처리를 부탁했는데, 나는 당황스러웠다.
얼마나 많은 개발자들이 .pyd 파일을 실행해봤을까? 당신도 이 개념에 익숙하지 않다면, 계속 읽어보자.
이 글에서는 다양한 파이썬 코드 파일 확장자를 소개하고 각각의 용도를 설명하겠다.
.py
가장 일반적인 파이썬 코드 파일 확장자로, 공식적으로는 '파이썬 소스 코드 파일'이라고 불린다.
특별히 설명할 필요는 없을 것이다.
.ipynb
비교적 흔히 볼 수 있는 확장자로, .ipynb는 'Jupyter Notebook' 파일의 확장자로 'IPython Notebook'을 의미한다.
데이터 분석, 머신러닝, 딥러닝을 공부해본 사람이라면 반드시 알고 있을 것이다!
.pyi
.pyi 파일은 파이썬의 타입 힌트 파일로, 코드의 **정적 타입** 정보를 제공한다.
주로 개발자들이 **타입 검사**와 **정적 분석**을 수행하도록 돕는다.
예제 코드:
# type_def.pyi
def greet(person: str) -> None:
print(f"안녕하세요, {person}!")
.pyi 파일은 일반적으로 해당하는 .py 파일과 동일한 이름을 가지도록 명명하는 것이 관례로, 이렇게 하면 자동으로 연결될 수 있다.
.pyc
.pyc는 파이썬 바이트코드 파일의 확장자로, 컴파일된 파이썬 소스 코드의 중간 표현 형식을 저장한다. 이진 파일이기 때문에 일반적으로 내용을 읽을 수 없다.
.pyc 파일에는 컴파일된 바이트코드가 포함되어 있어 파이썬 인터프리터가 소스 코드를 다시 컴파일할 필요 없이 더 빠르게 로드하고 실행할 수 있다.
.pyd
.pyd는 C나 C++로 작성된 이진 파이썬 확장 모듈 파일을 나타내는 확장자다.
.pyd 파일은 컴파일된 이진 파일로, 컴파일된 확장 모듈 코드와 파이썬 인터프리터와 상호작용하는 데 필요한 정보를 포함한다.
또한, .pyd 파일은 일반 파이썬 모듈을 import하는 것처럼 파이썬에서 import 문을 통해 가져와 사용할 수 있다.
C나 C++의 실행 속도가 일반 순수 파이썬 코드보다 빠르기 때문에, 특히 계산 집약적인 작업의 경우 확장 모듈을 사용하여 파이썬 코드의 성능을 최적화할 수 있다.
.pyw
.pyw는 파이썬 윈도우 스크립트 파일의 확장자다.
명령줄 인터페이스(즉, 콘솔 창)가 없는 **윈도우 애플리케이션**을 생성하는 데 사용되는 특정 유형의 파이썬 스크립트 파일을 나타낸다.
일반적으로 파이썬 스크립트를 실행하면 스크립트 출력을 표시하고 사용자 입력을 받는 명령줄 창이 열린다. 하지만 그래픽 사용자 인터페이스(GUI) 애플리케이션과 같은 일부 애플리케이션에는 명령줄 인터페이스가 필요하지 않고, 대신 창에 상호작용 인터페이스를 표시하고 싶을 때 .pyw 파일을 사용할 수 있다.
예제 코드:
# gui_app.pyw
import tkinter as tk
def handle_button_click():
label.config(text="버튼이 클릭되었습니다!")
window = tk.Tk()
button = tk.Button(window, text="클릭하세요", command=handle_button_click)
button.pack()
label = tk.Label(window, text="안녕하세요, 세계!")
label.pack()
window.mainloop()
.pyx
.pyx는 Cython 소스 코드 파일의 확장자다.
Cython은 **컴파일형 정적 타입 확장 언어**로, 파이썬 코드에서 C 언어의 문법과 특성을 사용하여 성능을 향상시키고 C 언어 라이브러리와 상호작용할 수 있게 해준다.
Cython과 일반 파이썬의 실행 속도를 비교해보았다:
fast_cython.pyx(compile 명령어 사용)
cdef int first, second, counter
def fibonacci_sequence(num):
if num <= 0:
raise ValueError("num은 양의 정수여야 합니다")
if num == 1:
return 0
elif num == 2:
return 1
else:
first = 0
second = 1
for counter in range(3, num + 1):
first, second = second, first + second
return second
standard_python.py
import timeit
def fibonacci_sequence(num):
if num <= 0:
raise ValueError("num은 양의 정수여야 합니다")
if num == 1:
return 0
elif num == 2:
return 1
else:
first, second = 0, 1
for _ in range(3, num + 1):
first, second = second, first + second
return second
# 순수 파이썬 버전
python_time = timeit.timeit("fibonacci_sequence(300)", setup="from __main__ import fibonacci_sequence", number=1000000)
# Cython 버전
cython_time = timeit.timeit("fast_cython.fibonacci_sequence(300)", setup="import fast_cython", number=1000000)
print("순수 파이썬 버전 실행 시간:", python_time)
print("Cython 버전 실행 시간:", cython_time)
결과:
순수 파이썬 버전 실행 시간: 12.391942400000516
Cython 버전 실행 시간: 6.574918199999956
이러한 계산 집약적인 작업의 경우, Cython은 일반 파이썬보다 거의 두 배 빠른 효율성을 보인다.