Nessuna descrizione

blueloveTH ea9f7ee97e fix error handler 2 anni fa
.github 65101b4334 ... 2 anni fa
benchmarks 51cf6d42e8 ... 2 anni fa
c_bindings ea9f7ee97e fix error handler 2 anni fa
docs 8c8ececc83 ... 2 anni fa
plugins a96a0740ad ... 2 anni fa
python 07be627cb8 ... 2 anni fa
scripts ee0489b8d6 up 2 anni fa
src 7b326b326f Update ceval.h 2 anni fa
tests f6865aa595 ... 2 anni fa
web db2492829b ... 2 anni fa
.gitattributes 0891000a46 init 3 anni fa
.gitignore a96a0740ad ... 2 anni fa
LICENSE a71b1a6e90 ... 2 anni fa
README.md be5a0b39d8 ... 2 anni fa
README_zh.md 547c55ce92 ... 2 anni fa
amalgamate.py fa94d49a2a Update amalgamate.py 2 anni fa
build.py 65101b4334 ... 2 anni fa
compile_flags.txt 65101b4334 ... 2 anni fa
prebuild.cpp ed690b4376 ... 2 anni fa
preprocess.py ed690b4376 ... 2 anni fa
run_c_binding_test.sh ea9f7ee97e fix error handler 2 anni fa
run_profile.sh 429f572c53 ... 2 anni fa
run_profile_test.sh a71b1a6e90 ... 2 anni fa
run_tests.sh a71b1a6e90 ... 2 anni fa

README.md

pocketpy: python interpreter in 1 file

GitHub GitHub release

English | 简体中文

pkpy is a lightweight(~10000 LOC) Python interpreter for game engine/apps, built on C++17 with STL.

It is extremely easy to embed. Including a compiler and a 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.

Quick start

Download the pocketpy.h on our GitHub Release page. And #include it in your project.

Compile flags

To compile it with your project, these flags must be set:

  • --std=c++17 flag must be set
  • Exception must be enabled
  • RTTI is not required

!!! For maximum performance, we recommend to use clang++ with -O2 flag. !!!

Example

#include "pocketpy.h"

using namespace pkpy;

int main(){
    // Create a virtual machine
    VM* vm = new VM();
    
    // Hello world!
    vm->exec("print('Hello world!')", "main.py", EXEC_MODE);

    // Create a list
    vm->exec("a = [1, 2, 3]", "main.py", EXEC_MODE);

    // Eval the sum of the list
    PyObject* result = vm->exec("sum(a)", "<eval>", EVAL_MODE);
    std::cout << CAST(int, result);   // 6
    return 0;
}

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] YES
Exception raise/try..catch YES
Dynamic Code eval()/exec() YES
Reflection hasattr()/getattr()/setattr() YES
Import import/from..import YES
Context Block with <expr> as <id>: YES
Type Annotation def f(a:int, b:float=1) YES
Generator yield i YES
Decorator @cache YES

Contribution

All kinds of contributions are welcome.

  • Submit a Pull Request
    • fix a bug
    • add a new feature
  • Open an Issue
    • any suggestions
    • any questions

Check our Coding Style Guide if you want to contribute C++ code.

Reference

The official implementation of Python programming language.

An excellent learning material. It illustrates how Python's virtual machine works.

License

pkpy is licensed under the MIT License.