py2many: Universal Python Transpiler to Rust, C++, Go, and More

Summary
py2many is a powerful Python transpiler designed to convert Python source code into multiple statically-typed programming languages, including Rust, C++, Go, Julia, and Kotlin. This tool helps developers improve application performance, enhance security, and enable seamless cross-platform development. It allows users to leverage Python's ease of development while benefiting from the speed and robustness of other languages.
Repository Info
Tags
Click on any tag to explore related repositories
Introduction
py2many is a robust Python transpiler that transforms Python source code into various statically-typed programming languages. It supports conversion to Rust, C++, Go, Zig, Julia, Nim, Dart, V, and D, with a primary focus on Python to Rust and production-ready support for C++. This tool enables developers to dramatically improve execution speed, enhance security by moving to safer systems languages, and facilitate cross-platform development.
Key features include multi-language support, automatic type inference, generation of optimized code for systems programming languages, and cross-platform compatibility across Linux, macOS, and Windows. py2many also serves as an excellent educational tool for learning new languages by comparing Python implementations with their transpiled equivalents.
Installation
To get started with py2many, you'll need Python 3.8+ installed.
Install via pip:
pip3 install --user py2many # installs to $HOME/.local
OR
sudo pip3 install py2many # installs systemwide
Examples
See how py2many converts Python code to idiomatic Rust:
Original Python code:
def fib(i: int) -> int:
if i == 0 or i == 1:
return 1
return fib(i - 1) + fib(i - 2)
# Demonstrate overflow handling
def add(i: i32, j: i32):
return i + j
Transpiled Rust code:
fn fib(i: i32) -> i32 {
if i == 0 || i == 1 {
return 1;
}
return (fib((i - 1)) + fib((i - 2)));
}
// return type is i64
pub fn add(i: i32, j: i32) -> i64 {
return ((i as i64) + (j as i64)) as i64;
}
To transpile your Python code to different languages, use the py2many command with the desired target language flag:
# Python to Rust
py2many --rust tests/cases/fib.py
# Python to C++
py2many --cpp tests/cases/fib.py
# Python to Go
py2many --go tests/cases/fib.py
You can find more transpiled examples for all supported languages in the official repository's tests/expected directory: More Examples.
Why Use py2many
py2many offers several compelling reasons for its adoption:
- Performance: Dramatically improve execution speed by transpiling Python to languages like Rust, C++, or Go, while retaining Python's development ease.
- Security: Write security-sensitive code in Python, verify it, then transpile to safer systems languages like Rust to mitigate common vulnerabilities.
- Cross-platform Development: Accelerate Python code by converting it into native extensions or standalone applications for various platforms.
- Mobile & Systems Programming: Develop once in Python and deploy to multiple targets, offering an alternative to platform-specific solutions.
- Learning Tool: An excellent resource for learning new programming languages by comparing Python implementations with their transpiled counterparts.
Links
For more information, examples, and to contribute to the project, please visit the official resources: