녹슨 파이썬과 대화하기

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에 초대하고 싶습니다. 아마도 흥미로운 것을 발견했을 것입니다. 읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기