Библиотеки запускают Rust внутри Python с помощью PyO3
Libraries Run Rust Inside Python (With PyO3)

Pydantic v2 и другие библиотеки используют Rust-расширения через PyO3. В статье на примере JSON-парсера на Rust показано, как экспортировать его в Python с помощью макросов #[pyfunction] и #[pymodule], а также как собрать и установить модуль через maturin. Главный вывод: преобразование Rust-структур в Python-объекты может занять больше времени, чем сам парсинг, поэтому оптимизировать нужно границу, а не только алгоритм.
Для документа с 100 000 значений это означает создание порядка 100 000 Python-объектов на границе, уже после того как парсинг полностью завершён. На большом документе именно этот цикл материализации, а не парсинг, может определять общее время работы.
- simonw
Я немного нервничал по поводу этой тенденции, когда она начала набирать обороты, потому что мне небезразличен Pyodide (Python, работающий через WebAssembly), а библиотеки, использующие PyO3, могут не работать в Pyodide.
К счастью, сейчас это в основном решено — вы можете компилировать и публиковать WASM-сборки расширений на Rust или C на PyPI, и Pyodide сможет их использовать.
Вот, например, WASM-сборка пакета Pydantic-core, включающего Rust: https://pypi.org/project/pydantic_core/#pydantic_core-2.49.0...
- the__alchemist
Это классный фокус! Я использую его, чтобы обеспечить простую установку программного обеспечения, написанного на Rust, но в основном используемого пользователями Python. (например, биологические инструменты) Они могут сделать `pip install <name>`, так как некоторые предпочитают это скачиванию исполняемых файлов/установщиков. Бонус: Maturin/PyO3 может автоматически собирать бинарники "manylinux", что помогает с разбродом в Linux ABI.
- skeledrew
Но работает ли это везде, где работает Python? Моя главная проблема с этим движением в сторону Rust всегда была совместимость. Python можно встраивать и запускать в чертовски многих местах. Как быть, когда библиотеки, от которых я, возможно, захочу зависеть, на самом деле реализованы на Rust, а моя целевая платформа не поддерживает/не может обработать тулчейн и нет цели сборки?
- roywiggins
> обратиться к, расширение на Rust делает работу
слишком длинно; не читал, извините
- startup_zombie_
Как вы думаете, какая часть существующей экосистемы PyPI могла бы реально работать таким образом без того, чтобы авторы пакетов делали что-то специально для WASM?