rust를 python에서 바인딩하여 사용할 수 있도록 도와주는 PyO3에 대해서 정리합니다. 해당 글은 PyO3 공식문서를 바탕으로 작성되었습니다.
사용목적
현재 러스트로 작성하고 있는 프로젝트인 tossicat를 파이썬에서도 사용할 수 있도록 패키지를 생성하고자 한다.
PyO3란
PyO3은 러스트 코드를 파이썬으로 바인딩하는 모듈이다. 해당 깃허브에 접속해보면 알겠지만 모듈 대부분이 rust로 개발되고 있으며, 자세한 내용은 Rust crate 문서나 공식 가이드에서 찾아볼 수 있다. 해당 모듈을 사용하여 Rust에서 기본 Python 모듈을 작성하거나 Python을 Rust 프로그램에서 실행할 수 있다.
maturin 사용법
maturin이란 PyO3를 통해서 러스트 코드를 보다 편리하게 파이썬 패키지로 빌드할 수 있도록 도와주는 도구이다. maturin은 기본적으로 virtualenv에서 작동한다. 아래는 maturin에서 기본적으로 사용하는 명령어이다.
maturin init
: 튜토리얼에서 사용할 예시 코드를 가져온다.maturin new
: 새로운 cargo 프로젝트를 생성한다.maturin develop
: 러스트 코드를 파이썬 패키지로 빌드하고 virtualenv에 바로 설치한다.maturin build
: target/wheels(default) 경로에 파이썬 패키지 wheel파일로 빌드한다.maturin publis
: 작성한 러스트 코드를 파이썬 패키지로 빌드하고 PyPi에 배포한다.
PyO3 튜토리얼
공식문서의 튜토리얼을 따라해보자. 원하는 경로에서 아래의 코드를 순서대로 입력한다.
1 | # 먼저 사용할 폴더 만들기 |
완료되었다면 필요한 환경설정은 끝났다. 다음으로 아래의 코드를 입력한 후 pyo3를 선택한다.
1 | $ maturin init |
그러면 아래와 같이 프로젝트가 생성되었다는 안내가 출력된다.
1 | ✨ Done! Initialized project {PATH}/string_sum |
튜토리얼을 진행하면 바로 패키지 개발을 테스트 해볼 수 있는 코드들이 /src/lib.rs
, cargo.toml
에 작성되어 있다.
아래의 명령어를 입력해서 테스트 해보자.
1 | $ maturin develop |
가상환경에 해당 패키지가 파이썬 모듈로 설치되었다. 파이썬에 직접 접속해서 빌드한 string_sum
패키지를 사용해보자.
1 | $ python3 |
정상적으로 작동하는 것을 확인할 수 있다. 만약 러스트 코드를 수정해야 한다면 수정 후 다시 maturin develop
을 입력하여 컴파일 후 테스트 해볼 수 있다.
또한 아래의 명령어를 사용하여 패키지wheel
파일로 저장할 수 있다.
1 | maturin build |