Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Python Interpreter written in Rust

License

NotificationsYou must be signed in to change notification settings

coolcoder613eb/RustPython

 
 

Repository files navigation

A Python-3 (CPython >= 3.5.0) Interpreter written in Rust 🐍 😱 🤘.

Build StatusBuild StatuscodecovLicense: MITContributorsGitter

Usage

Check out ouronline demo running on WebAssembly.

To test RustPython, do the following:

$ git clone https://github.com/RustPython/RustPython$ cd RustPython$ cargo run demo.pyHello, RustPython!

Or use the interactive shell:

$ cargo runWelcome to rustpython>>>>> 2+24

Disclaimer

RustPython is in a development phase and should not be used in production or a fault intolerant setting.

Our current build supports only a subset of Python syntax.

Contribution is also more than welcome! See our contribution section for more information on this.

Goals

  • Full Python-3 environment entirely in Rust (not CPython bindings)
  • A clean implementation without compatibility hacks

Documentation

Currently along with other areas of the project, documentation is still in an early phase.

You can read theonline documentation for the latest code on master.

You can also generate documentation locally by running:

$ cargo doc# Including documentation for all dependencies$ cargo doc --no-deps --all# Excluding all dependencies

Documentation HTML files can then be found in thetarget/doc directory.

If you wish to update the online documentation, push directly to therelease branch (or ask a maintainer to do so). This will trigger a Travis build that updates the documentation and WebAssembly demo page.

Code organization

  • parser/src: python lexing, parsing and ast
  • vm/src: python virtual machine
    • builtins.rs: Builtin functions
    • compile.rs: the python compiler from ast to bytecode
    • obj: python builtin types
  • src: using the other subcrates to bring rustpython to life.
  • docs: documentation (work in progress)
  • py_code_object: CPython bytecode to rustpython bytecode converter (work in progress)
  • wasm: Binary crate and resources for WebAssembly build
  • tests: integration test snippets

Contributing

Contributions are more than welcome, and in many cases we are happy to guide contributors through PRs or on gitter.

With that in mind, please note this project is maintained by volunteers, some of the best ways to get started are below:

Most tasks are listed in theissue tracker.Check issues labeled withgood first issue if you wish to start coding.

Another approach is to checkout the source code: builtin functions and object methods are often the simplestand easiest way to contribute.

You can also simply runcargo run tests/snippets/whats_left_to_implement.py to assist in finding anyunimplemented method.

Testing

To test rustpython, there is a collection of python snippets located in thetests/snippets directory. To run those tests do the following:

$cd tests$ pipenv install$ pipenv run pytest -v

There also are some unit tests, you can run those with cargo:

$ cargotest --all

Using another standard library

As of now the standard library is under construction.

You can play aroundwith other standard libraries for python. For example,theouroboros library.

To do this, follow this method:

$cd~/GIT$ git clone git@github.com:pybee/ouroboros.git$export PYTHONPATH=~/GIT/ouroboros/ouroboros$cd RustPython$ cargo run -- -c'import statistics'

Compiling to WebAssembly

At this stage RustPython only has preliminary support for web assembly. The instructions here are intended for developers or those wishing to run a toy example.

Setup

To get started, installwasm-pack andnpm. (wasm-bindgen should be installed bywasm-pack. if not, install it yourself)

Build

Move into thewasm directory. This directory contains a library crate for interopwith python to rust to js and back inwasm/lib, the demo website found athttps://rustpython.github.io/demo inwasm/demo, and an example of how to usethe crate as a library in one's own JS app inwasm/example.

cd wasm

Go to the demo directory. This is the best way of seeing the changes made to eitherthe library or the JS demo, as therustpython_wasm module is set to the globalJS variablerp on the website.

cd demo

Now, start the webpack development server. It'll compile the crate and thenthe demo app. This will likely take a long time, both the wasm-pack portion andthe webpack portion (from after it says "Your crate has been correctly compiled"),so be patient.

npm run dev

You can now open the webpage onhttps://localhost:8080 and Python code in eitherthe text box or browser devtools with:

rp.pyEval(`print(js_vars['a'] * 9)`,{vars:{a:9}});

Alternatively, you can runnpm run build to build the app once, without watchingfor changes, ornpm run dist to build the app in release mode, both for thecrate and webpack.

Code style

The code style used is the default rustfmt codestyle. Please format your code accordingly.

Community

Chat with us ongitter.

Credit

The initial work was based onwindelbouwman/rspython andshinglyu/RustPython

Links

These are some useful links to related projects:

About

A Python Interpreter written in Rust

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C70.3%
  • Rust24.9%
  • Python4.6%
  • JavaScript0.2%
  • EJS0.0%
  • CSS0.0%

[8]ページ先頭

©2009-2025 Movatter.jp