Cython을 사용하면 기존 Python 코드를 C로 변환하여 보안성을 높이고, 공통 코드 기반으로 Windows & macOS에서 일관되게 관리할 수 있습니다. 이를 통해 모듈 단위로 배포하여 분산 개발이 가능해지고, 실행 속도도 개선됩니다.
1️⃣ Python 코드 작성 (윈도우 GUI 포함)
먼저, Cython으로 변환할 윈도우 GUI 코드와 함께 Cython에서 호출할 함수를 만듭니다.
✅ main.py (기본 GUI 코드)
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
import mymodule # Cython으로 컴파일된 모듈
class C_MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Cython 테스트")
self.setGeometry(100, 100, 400, 300)
self.button = QPushButton("Cython 함수 실행", self)
self.button.clicked.connect(self.run_cython_function)
layout = QVBoxLayout()
layout.addWidget(self.button)
self.setLayout(layout)
def run_cython_function(self):
result = mymodule.fibonacci(10) # Cython에서 변환한 함수 호출
print(f"Cython 결과: {result}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = C_MainWindow()
window.show()
sys.exit(app.exec())
2️⃣ Cython용 Python 파일 작성
✅ mymodule.pyx (Cython 변환 대상)
# Cython에서 사용할 변수 및 함수 선언
cdef int _fibonacci(int n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return _fibonacci(n-1) + _fibonacci(n-2)
# Python에서 호출할 함수
def fibonacci(int n):
return _fibonacci(n)
- cdef 키워드를 사용하여 내부적으로 C로 최적화된 함수를 생성합니다.
- Python에서 호출할 fibonacci(n) 함수는 cdef로 작성된 _fibonacci(n)을 호출합니다.
3️⃣ Cython 빌드 스크립트 작성
✅ setup.py
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("mymodule.pyx", compiler_directives={"language_level": "3"})
)
- cythonize("mymodule.pyx")를 통해 .pyx 파일을 C로 변환합니다.
- language_level=3을 설정하여 Python 3 문법을 유지합니다.
4️⃣ Cython 코드 빌드 (C로 변환)
터미널 또는 PyCharm에서 실행:
python setup.py build_ext --inplace
- mymodule.c 파일이 생성됨
- 해당 C 파일을 컴파일하여 mymodule.pyd (Windows) 또는 mymodule.so (Mac/Linux) 파일이 생성됨
- 이제 Python에서 해당 모듈을 import하여 사용할 수 있음
5️⃣ Python에서 Cython 모듈 사용
이제 main.py에서 import mymodule을 통해 fibonacci(n) 함수를 실행하면 됩니다.
✅ 이점
- C로 변환되어 실행 속도가 향상됨
- .pyd 또는 .so 파일만 배포하면 되므로 보안성 강화
- Python 코드 없이 C로 컴파일된 바이너리 모듈만 배포 가능
- Mac & Windows에서 공통 코드로 사용 가능
🛠 결론
Cython을 활용하면 보안성, 성능 개선, 크로스플랫폼 관리 용이성을 확보하면서, 공통 모듈을 생성하여 Python에서 호출할 수 있습니다. 이를 통해 분산 개발이 가능하고, 모듈 단위 배포가 가능해집니다. 🚀
ModuleNotFoundError: No module named 'Cython' 오류는 Cython이 설치되지 않았기 때문입니다. 아래 방법으로 해결하세요.
✅ 1️⃣ Cython 설치
터미널(또는 PowerShell)에서 다음 명령어를 실행하세요.
pip install cython
설치가 완료되면 Cython이 정상적으로 설치되었는지 확인합니다.
python -c "import Cython; print(Cython.__version__)"
설치된 버전이 출력되면 정상 설치된 것입니다.
✅ 2️⃣ python setup.py build_ext --inplace 다시 실행
Cython이 설치된 후 다시 빌드를 실행하세요.
python setup.py build_ext --inplace
✅ 3️⃣ 그래도 해결되지 않을 경우
🔹 가상 환경(venv) 사용 여부 확인
현재 사용 중인 Python 환경이 가상 환경(venv 또는 conda) 이라면 해당 환경에 Cython이 설치되지 않았을 수 있습니다.
가상 환경을 사용하고 있다면, 해당 환경을 활성화한 후 다시 pip install cython을 실행하세요.
🔹 Python 경로 확인
python이 여러 개 설치된 경우, Cython이 올바른 Python 환경에 설치되지 않았을 수 있습니다.
아래 명령어로 현재 사용 중인 Python 경로를 확인하세요.
where python
Cython이 올바른 Python 환경에 설치되었는지 확인 후 다시 실행해보세요.
✅ 최종 확인
Cython이 정상적으로 설치된 후 아래 명령어를 실행하면 .c 파일과 .pyd 파일이 생성됩니다.
python setup.py build_ext --inplace
생성된 파일:
- mymodule.c
- mymodule.pyd (Windows) 또는 mymodule.so (Mac/Linux)
이후 import mymodule을 사용하여 Python에서 Cython 모듈을 호출할 수 있습니다. 🚀
✅ Cython 빌드 오류 해결: Microsoft Visual C++ Build Tools 설치 필요
오류 메시지:
error: Microsoft Visual C++ 14.0 or greater is required.
Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
이 오류는 Windows에서 Cython을 컴파일할 때 필요한 C++ 컴파일러(MSVC 14.0 이상)가 없기 때문입니다.
🛠 해결 방법: Microsoft C++ Build Tools 설치
- Visual Studio Build Tools 다운로드
- 아래 링크에서 Microsoft Visual C++ Build Tools를 다운로드합니다.
🔗 다운로드 링크
- 아래 링크에서 Microsoft Visual C++ Build Tools를 다운로드합니다.
- 설치 진행
- 다운로드한 vs_BuildTools.exe 실행
- "C++ Build Tools" 선택
- 필수 패키지 선택
- ✅ "MSVC v142 (또는 최신 버전) C++ 빌드 도구"
- ✅ "Windows 10 SDK"
- ✅ "C++ CMake Tools"
- 설치 후 컴퓨터 재부팅
- Python에서 다시 Cython 빌드 실행
- python setup.py build_ext --inplace
✅ 설치 후 확인 방법
설치가 완료되면 터미널에서 다음 명령어를 실행하여 컴파일러 버전을 확인하세요.
cl
출력 예시:
Microsoft (R) C/C++ Optimizing Compiler Version 19.XX.XXXXX for x86
이런 메시지가 나오면 정상적으로 설치된 것입니다.
✅ 추가 설정 (필요 시)
설치 후에도 여전히 오류가 발생한다면, 터미널에서 Visual Studio 개발 환경을 활성화하세요.
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat"
(경로는 설치된 버전에 따라 다를 수 있음)
이후 다시 python setup.py build_ext --inplace 실행하면 정상적으로 빌드될 것입니다. 🚀