PocketPy is a lightweight(~5000 LOC) Python interpreter for game engines.
English | 简体中文
It is extremely easy to embed. Including a compiler, optimizer and bytecode virtual machine. All of them are available in a single header file pocketpy.h
, without external dependencies.
Please see https://pocketpy.dev for details or try Live Demo.
Features
Name | Example | Supported |
---|---|---|
If Else | if..else..elif |
YES |
Loop | for/while/break/continue |
YES |
Function | def f(x,*args,y=1): |
YES |
Subclass | class A(B): |
YES |
List | [1, 2, 'a'] |
YES |
ListComp | [i for i in range(5)] |
YES |
Slice | a[1:2], a[:2], a[1:] |
YES |
Tuple | (1, 2, 'a') |
YES |
Dict | {'a': 1, 'b': 2} |
YES |
F-String | f'value is {x}' |
YES |
Unpacking | a, b = 1, 2 |
YES |
Star Unpacking | a, *b = [1, 2, 3] |
NO |
Exception | raise/try..catch |
YES |
Dynamic Code | eval()/exec() |
YES |
Reflection | hasattr()/getattr()/setattr() |
YES |
Import | import/from..import |
YES |
Context Block | with |
YES |
Type Annotation | def f(a: int, b : float = 1) |
YES |
Getting Started
C/C++
For C/C++ developers, you can download the pocketpy.h
on our GitHub release page.
https://github.com/blueloveTH/pocketpy/releases/latest
Check C-API for references.
#include "pocketpy.h" int main(){ // Create a virtual machine VM* vm = pkpy_new_vm(true); // Hello world! pkpy_vm_exec(vm, "print('Hello world!')"); // Create a list pkpy_vm_exec(vm, "a = [1, 2, 3]"); // Eval the sum of the list char* result = pkpy_vm_eval(vm, "sum(a)"); std::cout << result << std::endl; // 6 // Free the resources pkpy_delete(result); pkpy_delete(vm); return 0; }
Unity Engine
PocketPy for Unity can be installed via Unity Asset Store.
https://assetstore.unity.com/packages/slug/241120
Debug.Log(vm.eval(“test(3.14)”)); // ‘4.14’
}
}” dir=”auto”>
using UnityEngine; public class Test01 : MonoBehaviour { // Start is called before the first frame update void Start() { // Create a virtual machine pkpy.VM vm = new pkpy.VM(); // Create a list vm.exec("a = [1, 2, 3]"); // Eval the sum of the list string result = vm.eval("sum(a)"); Debug.Log(result); // 6 // Print to the standard output vm.exec("print(a)"); pkpy.PyOutput o = vm.read_output(); Debug.Log(o.stdout); // [1, 2, 3] // Create a binding vm.bind("builtins", "test", (double x) => x+1); Debug.Log(vm.eval("test(3.14)")); // '4.14'