Рубрики
Без рубрики

Integrar Rust Tus Proyectos Python

Uno de los aspectos que siempre me ha parecido interesante de Rust, Además de l … Помечено Python, Rust.

Uno de los aspectos que siempre me ha parecido interesante de Ржавчина , Además de las ventajas y caracteristicas por las que desarrolladores y empresas están apostando por este, es lo bien que se integra con otros lenguajes y tecnologías, como con Питон усандо PYO3 О Node.js Грасиас А Неоновый Отказ

Empecé A Artender Rust A Crivesios de 2016, EP aquella Época Ya desarrollaba Python Y Enseñaba Programación ru Una Universidad Local. Desde Entertons Tenía En Mi Lista de Pendientes Armender Sobre Su Integración Con Otsas Tecnologías.

HACE UNA SEMANA ESTUVE TRABAJANDO EN UNA NUEVA INTERFAZ DE USUARIO (UI) Y RELAZANDO CORECCIONES Y MEJORAS AL Código de Una Alplacación Que Estoy Desarrollando Con Rust Ракета , Cuya Primera Versión Estaba Escrita En Python Y De La Cual Hableé en Artículo передний.

CON IDE IDEE DE RETOMAR UN PREECTO EL EL QUE ESTUVE TRABAJANDO A FALLES DE 2017, UNA ALPACACION DESARROLDADA CON PYTHON y Колбу Empecé Redactar El Probal Para Hacer La Migración Rust, Sin Embargo, Essiten Algunas Bibliotecas Para Las Que No Sizee Ena Crate Que La Reemplace.

LA IDEA ERA MIGRAR LA Appleación ReeScribir Todo El Código, Pero Al Encontrar Este Procementa, VI La Oportunidad de Artrender A Asian Ambos Lenguajes Usando Pyo3, Y Asi Mantener Parte del Código En Python Y Reescribir El Resto Del Código Con Rust.

En este breve artículo contaré lo que astrengí el fru de semana sobre como usar pyo3 para integrar Rust Con Tus Proyectos Python.

PYO3.

PYO3 es en crate que que Premite La Integración Entre Python Y Rust. Пуде Usarse Para Escribir Módulos de Python, Asi Como Para Ejecutar E Interactuar Con Código de Python Desde Rust. Pyo3 Funciona Con La Versión Nightly de Rust.

Uso.

De acuerdo al repositorio de github, pyo3 soporta python 3.5 en adelante. La Versión Mínima De Rust ReveriDa Es La 1.34.0 (Nightly) Del 6 de Febrero.

SE Peede Escribir ООН Módulo Nativo de Python Con Ruag O Usar Python desde un Binario de Rust.

EN Algunos Sistemas Operativos SE Necesita Instalar Algunos Paquees Adianices, Como EN Ubuntu Que Se Instalan Los Siguientes:

$ sudo apt install python3-dev python-dev

Configuración.

  • Instalar Rust Nightly Con Рустина Si No Se Tiene Instalado.
$ rustup install nightly
  • Crage Un Nuevo ProReecto Con Груз Отказ
$ cargo new hello_python
  • Asignar Nightly Al Prakecto Creado.
$ cd hello_python
$ rustup override set nightly

Усандо ржавчина

Pyo3 Puede Usarse Para Generar ООН Módulo Nativo de Python. El Siguiente Ejemplo Подходит к Una Función Que Dará Formato A La Suma de Dos Números Como Cadena.

Редактировать el archivo Cargo.toml Agregar Pyo3 Como Coneedencia E Indarle A Груз que se está creando una biblioteca.

Cargo.toml.

[package]
name = "string-sum"
version = "0.1.0"
edition = "2018"

[lib]
name = "string_sum"
crate-type = ["cdylib"]

[dependencies.pyo3]
version = "0.6.0-alpha.4"
features = ["extension-module"]

SRC/lib.rs.

Crage El Archivo lib.rs Y Colocar El Código Conssiventte.

// Not required when using Rust 2018
extern crate pyo3;

use pyo3::prelude::*;
use pyo3::wrap_pyfunction;

#[pyfunction]
/// Formats the sum of two numbers as string
fn sum_as_string(a: usize, b: usize) -> PyResult {
    Ok((a + b).to_string())
}

/// This module is a python module implemented in Rust.
#[pymodule]
fn string_sum(py: Python, m: &PyModule) -> PyResult<()> {
    m.add_wrapped(wrap_pyfunction!(sum_as_string))?;

    Ok(())
}

SE Importa El Crate de Pyo3 Mediante Extern Crate Pyo3; Отказ ESTA Línea ES Opcional Si Se Está usando la Edición 2018 de Rust.

SE INDICAN LAS Funciones Y Macros Que Se Usarán.

SE DECLARA LA FUNCION SUM_AS_STRING que realizará la suma de dos números y conventirá a cadena el butevalado.

SE DECLARA LA FUNCION string_sum que boace al módulo de python y doctro de esta inde que que la función SUM_AS_STRING Podrá Ser Llamada Una Vez Que El Módulo Sea Importada Doctro del Script de Python.

En windows y gnu/linux se juded conillented con Грузовая сборка --release Отказ EN MacOS SE Deben Findar Argentos Adientos. Una Opción Escilar Con Грузовой Rustc --release - -C link-arg = -Ondefined -c , La Otra Es Crage El Archivo .cargo/config Con El Siguiente Contenido:

[target.x86_64-apple-darwin]
rustflags = [
  "-C", "link-arg=-undefined",
  "-C", "link-arg=dynamic_lookup",
]

Уна ВЭЗ Que Termina La CompiLación, SE Copia y Renombra La Biblioteca Compartida desde El Directorio цель . EN Macos, Renombar libstring_sum.dylib. a string_sum.so , en windows libstring_sum.dll А string_sum.pyd. y en gnu/linux libstring_sum.so А string_sum.so .

EN EL Directiono Donde SE HA COPIADO LA BIBLIOTECA, SE PUEDE EJECUTAR UNA SHELL INTERACTIVA DE PYTHON E Importar El Módulo Con Импортировать string_sum Отказ

>>> import string_sum
>>> a = 15
>>> b = 17
>>> s = string_sum.sum_as_string(a, b)
>>> print(s)
32

Para Paribilar, Probar Y Publatar El Croate Como Módulo de Python, SE Puede Usar Pyo3-pack. О SetUpeools-Rust Отказ

sum.py

Эль Módulo También Puede Usarse Script Script de Python.

import string_sum
a = 15
b = 17
s = string_sum.sum_as_string(a, b)
print(s)
$ python sum.py
32

Усандо Python desde Rust

El Siguiente Ejemplo Muestra El Valor de sys.version Отказ

Редактировать el archivo Cargo.toml y agregar pyo3 como coneedencia

Cargo.toml.

...

[dependencies]
pyo3 = "0.6.0-alpha.4"

SRC/Main.rs.

Редактировать el archivo main.rs Y Colocar El Código CORDIRETE Que Masterará El Valor de sys.version Отказ

// Not required when using Rust 2018
extern crate pyo3;

use pyo3::prelude::*;
use pyo3::types::IntoPyDict;

fn main() -> PyResult<()> {
    let gil = Python::acquire_gil();
    let py = gil.python();
    let sys = py.import("sys")?;
    let version: String = sys.get("version")?.extract()?;
    let locals = [("os", py.import("os")?)].into_py_dict(py);
    let code = "os.getenv('USER') or os.getenv('USERNAME') or 'Unknown'";
    let user: String = py.eval(code, None, Some(&locals))?.extract()?;
    println!("Hello {}, I'm Python {}", user, version);
    Ok(())
}

Ejecutar La Alipeación Con Грузовой бег Отказ

Exportarar SVG PDF USANDO CAIROSVG

PARA EL PREECTO EL EL QUE ESTOY TRABAJANDO, REBO Exportar Una Imagen en formato svg a pdf, usando Каиресвг que solo está disponible para python.

El Siguiente Código Muestra Como Usar Cairosvg Desde Rust.

use pyo3::prelude::*;
use pyo3::types::IntoPyDict;

fn main() -> PyResult<()> {
    let gil = Python::acquire_gil();
    let py = gil.python();

    let svg_file = "img.svg";
    let pdf_file = "doc.pdf";

    let locals = [("cairosvg", py.import("cairosvg")?)].into_py_dict(py);
    let code = "cairosvg.svg2pdf(url='".to_owned()+svg_file+"', write_to='"+pdf_file+"')";
    py.eval(&code, None, Some(&locals))?;

    Ok(())
}

Espero Esta Breve Residucción Sea de Utilidad. Contaré en un próximo Artículo Cual Ha Sido Mi Exportedia Usando Pyo3 En La Alloxión Que Estoy Desarrollando.

Оригинал: “https://dev.to/mattdark/integrar-rust-a-tus-proyectos-python-5ckj”