We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode  Ep 40. Rust 和 PyO3:让 Python 再次伟大 🦀 ❤️ 🐍

Ep 40. Rust 和 PyO3:让 Python 再次伟大 🦀 ❤️ 🐍

2023/5/13
logo of podcast  捕蛇者说

捕蛇者说

Shownotes Transcript

嘉宾

Messense)

主播

链接

- PyO3)

- PyO3 有哪些应用?

  • polars): Fast multi-threaded DataFrame library in Rust | Python | Node.js.

  • pydantic-core): Core validation logic for pydantic written in Rust.

  • cryptography): Python cryptography library with some functionality in Rust.

  • orjson): Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy

PyO3 前身:rust-cpython)

- Maturin): Build and publish crates with pyo3, rust-cpython and cffi bindings as well as rust binaries as python packages

- What Are Python Wheels and Why Should You Care?)

- PEP 517 – A build-system independent format for source trees)

- Ruff): An extremely fast Python linter, written in Rust.

- typos): Source code spell checker

- ChatGPT 写的 Rust 调用 Python C-API 的例子

`use std::os::raw::{c_char, c_int};
use std::ffi::CString;
use libc::{c_double, c_void};

#[link(name = "python3.8")]
extern "C" {
    fn Py_Initialize();
    fn Py_Finalize();
    fn Py_BuildValue(format: *const c_char, ...) -> *mut c_void;
}

fn main() {
    unsafe {
        // 初始化 Python 解释器
        Py_Initialize();

        // 构建一个 Python 元组对象,并打印它
        let x = 1.23 as c_double;
        let y = 4.56 as c_double;
        let format = CString::new("dd").unwrap().as_ptr();
        let result = Py_BuildValue(format, x, y);
        let s = CString::from_raw(result as *mut c_char).into_string().unwrap();
        println!("{}", s);

        // 关闭 Python 解释器
        Py_Finalize();
    }
}
`

- pyo3-ffi): Python-API bindings for the PyO3 ecosystem

- 在 PyO3 里通过 allow_threads) 关掉 Python GIL)

- pybind11) — Seamless operability between C++11 and Python

- Cython)

- CFFI): C Foreign Function Interface for Python. Interact with almost any C code from Python, based on C-like declarations that you can often copy-paste from header files or documentation.

- zig cc): a Powerful Drop-In Replacement for GCC/Clang

- wechatpy: 微信公众平台第三方 Python SDK

- OrbStack): Fast, light, simple Docker & Linux on macOS

- FancyWM) - a dynamic tiling window manager for Windows 10/11

- CSAPP): Computer Systems: A Programmer's Perspective

- APUE): Advanced Programming in the UNIX® Environment

- 提到的读书撕书的灵感来自于:李敖先生)

- 吴恩达 prompt engineering 课程: ChatGPT Prompt Engineering for Developers)

- Kiwi 浏览器)

爱发电上赞助)