카테고리 없음

Cython을 활용한 파이썬 코드의 C 변환 및 모듈화 테스트

idea9329 2025. 2. 8. 15:39
반응형

 

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 설치

  1. Visual Studio Build Tools 다운로드
    • 아래 링크에서 Microsoft Visual C++ Build Tools를 다운로드합니다.
      🔗 다운로드 링크
  2. 설치 진행
    • 다운로드한 vs_BuildTools.exe 실행
    • "C++ Build Tools" 선택
    • 필수 패키지 선택
      • ✅ "MSVC v142 (또는 최신 버전) C++ 빌드 도구"
      • ✅ "Windows 10 SDK"
      • ✅ "C++ CMake Tools"
    • 설치 후 컴퓨터 재부팅
  3. Python에서 다시 Cython 빌드 실행
  4. 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 실행하면 정상적으로 빌드될 것입니다. 🚀

반응형