Python으로 작성된 소스 코드를 C#에서 활용하기 위해 몇가지를 살펴보고 있습니다.
그러던 와중에 Python.Included라는 오픈 소스를 발견하여 가벼운 사용 사례를 공유합니다.
C# 코드레벨에서 Python 코드를 사용하는 방법에는 몇가지가 있습니다.
-
Process로써 Call
(단순히 일반 프로세스로써 콜 하는 방법이기에 설명을 생략하겠습니다.) -
IronPython
Python의 .NET 구현체 입니다. C#과 가장 결합도가 좋지만 현재 Python2 에 대한 지원만이 정식 릴리즈 되었고, Python3에 대한 구현체는 Beta로 공개되었습니다. 그런데 이도 Python3.4에 대한 구현체이기에 최신 Python 버전 사용에 제한이 있습니다. -
PythonNet
CPython을 그대로 사용하지만 CLR과의 통합을 이뤄냈습니다. 이로써 Python3의 최신 언어 버전도 사용을 할 수 있지만 호스팅 환경에 CPython을 선행적으로 설치해야합니다. -
Python.Included
PythonNet을 그대로 사용하지만 CPython에 대한 설치까지 관여하기에 CPython에 대한 선행 설치 없이 Nuget 을 통한 참조만으로 바로 사용이 가능합니다. 그러나 Initialize할때 CPython을 Curl을 통해 다운로드 받는 형식이라 Offline 환경에서 최초 사용은 불가능합니다.
위에 열거된 항목들에서 Python.Included를 활용해 봅시다.
- Nuget을 통해 Python.Included를 설치.
- Getting Started 에서 소개된 코드 복붙.
- 실행 ㄱㄱ싱
위 그림에서 확인되는 대로 매우 손쉽게 Python 코드와의 호환을 얻어 낼 수 있습니다.
Python.Included는 단순히 CPython에 대한 설치만을 관여하기에, 이후 Python 소스 코드에 대한 사용은
Pythonnet을 통해 수행하시면 됩니다.
Python.Included 는 아직 검증되지 않은 성숙도를 가지고 있습니다. 사용에 주의하시기 바랍니다.
현재 Python3.7만을 지원하고 Windows에서만 테스트해봤다고 합니다.
또한 AMD64 대상만 가능합니다.
아주 가벼운 오픈 소스라고 보시면 될 것 같습니다.
Pythonnet을 사용할 때 CPython에 대한 구비를 Developer-centric으로써 관리하고 싶다면 Python.Included는 고려해 볼만 한 도구입니다.
내부 소스 코드가 단순해서 코드 공헌에 어려움이 없는 놈 같습니다. 저도 Python의 다른 버전을 지원할 수 있도록 공헌해볼까 합니다.