Aucune description

BLUELOVETH 5891a88c56 Create FUNDING.yml il y a 2 ans
.github 5891a88c56 Create FUNDING.yml il y a 2 ans
benchmarks 51cf6d42e8 ... il y a 2 ans
c_bindings a00cba8de1 complex error case is working il y a 2 ans
docs 12210636ef ... il y a 2 ans
plugins 2e5c2b7147 Update build.gradle il y a 2 ans
python 940159e1ab add `dict.pop` il y a 2 ans
scripts ee0489b8d6 up il y a 2 ans
src 19c0e8cac6 ... il y a 2 ans
tests 1898c8a434 fix a lexer bug il y a 2 ans
web db2492829b ... il y a 2 ans
.gitattributes 0891000a46 init il y a 3 ans
.gitignore 9182ba5fc5 ... il y a 2 ans
LICENSE a71b1a6e90 ... il y a 2 ans
README.md d1b06f0633 ... il y a 2 ans
README_zh.md d1b06f0633 ... il y a 2 ans
amalgamate.py fa94d49a2a Update amalgamate.py il y a 2 ans
build.py a421377116 ... il y a 2 ans
compile_flags.txt 65101b4334 ... il y a 2 ans
preprocess.py a186f52354 Update preprocess.py il y a 2 ans
run_c_binding_test.sh ea9f7ee97e fix error handler il y a 2 ans
run_profile.sh 429f572c53 ... il y a 2 ans
run_profile_test.sh a71b1a6e90 ... il y a 2 ans
run_tests.sh a71b1a6e90 ... il y a 2 ans

README.md

pocketpy: python interpreter in 1 file

GitHub GitHub release

English | 简体中文

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

It aims to be an alternative to lua for game scripting, with elegant syntax, powerful features and competitive performance. pkpy is extremely easy to embed via 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.