녹슨 파이썬과 대화하기
5590 단어 pythonrustprogramming
녹에 대한 몇 마디
Rust는 엄청나게 빠르게 실행되고 세그폴트를 방지하며 스레드 안전을 보장하는 시스템 프로그래밍 언어입니다.
Rust로 Python 모듈을 작성하는 이유는 무엇입니까?
Python은 의심할 여지 없이 더 강력한 프로그래밍 언어 중 하나이지만 더 빠르고 더 낮은 수준의 도구가 필요한 상황이 있습니다. 예를 들어 가능한 가장 빠른 코드 실행에 관심이 있는 계산
시작하기
1. 러스트 앤 카고 설치
Linux 및 macOS 시스템에서는 다음과 같이 수행됩니다.
$ curl https://sh.rustup.rs -sSf | sh
Windows에서 rustup-init.exe를 다운로드하고 실행합니다. 콘솔에서 설치를 시작하고 성공 시 위의 메시지를 표시합니다.
2. 새 프로젝트 생성 및 Cargo.toml 편집
$ cargo new pyrustlib --lib
Cargo.toml 파일에 cpython 종속성을 추가해야 합니다. 이 파일은 다음과 같아야 합니다.
[package]
name = "pyrustlib"
version = "0.1.0"
edition = "2021"
[lib]
name = "pyrust"
crate-type = ["dylib"]
[dependencies.cpython]
version = "0.7"
features = ["extension-module"]
파이썬과 대화하자
다음으로 src/lib.rs를 열고 편집을 시작합니다. 이것은 우리 라이브러리의 실제 코드가 있는 곳입니다.
#[macro_use]
extern crate cpython;
use cpython::{Python, PyResult, PyString};
fn hello_from_rust(_py: Python) -> PyResult<PyString> {
Ok(PyString::new(_py, "Hello from Rust!"))
}
py_module_initializer!(libpyrust, libpyrust, PyInit_libpyrust, |py, m | {
m.add(py, "__doc__", "This module is implemented in Rust")?;
m.add(py, "hello_world", py_fn!(py, hello_from_rust()))?;
Ok(())
});
py_module_initializer
는 라이브러리 상단에서 가져온 cpython 크레이트에 의해 정의된 매크로입니다. 첫 번째 매개변수('status')는 모듈의 이름이고, 두 번째 매개변수는 모듈의 Python2 이름 지정이며, 세 번째 매개변수는 Python3용입니다. 첫 번째 줄(py, m)의 마지막 코드 세그먼트는 수신된 모듈 개체를 수정할 수 있습니다.그런 다음 독스트링을 추가하고 py_fn을 사용합니다! 함수의 파이썬 버전을 빌드하기 위한 매크로. 그게 전부입니다! 저장하고 종료.
코드 컴파일
프로젝트의 루트 디렉토리(Cargo.toml 파일이 있는 곳)에 있는지 확인하십시오.
다음 명령을 실행하여 코드를 컴파일합니다.
cargo build --release
컴파일이 성공적으로 완료되면 기본 프로젝트 디렉토리에 새
target
디렉토리가 표시됩니다. 대상/릴리스에서 라이브러리를 찾을 수 있으며 이름은 pyrustlib.so
입니다.파이썬 인터프리터에서 테스트
파이썬에서 이 모듈을 가져오기 위한 이름은
py_module_initializer
에 주어진 이름이며 제 경우에는 libpyrust
입니다.보시다시피 모듈이 제대로 작동합니다.
추가 정보
cpython의 고급 사용에 대해서는 rust-cpython 저장소를 살펴보는 것이 좋습니다.
결론
이 튜토리얼이 어떤 식으로든 도움이 되었기를 바랍니다. 오류나 부정확한 내용이 있으면 메시지를 보내주세요. 내 github에 초대하고 싶습니다. 아마도 흥미로운 것을 발견했을 것입니다. 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(녹슨 파이썬과 대화하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sectasy0/talking-to-python-with-rust-n6i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)