mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
3.1 KiB
3.1 KiB
icon | order | label |
---|---|---|
rocket | 20 | Quick Start |
You have two options to integrate pkpy into your project.
Use the single header file
Download the pocketpy.h
on our GitHub Release page.
And #include
it in your project. The header can only be included once.
Use CMake
Clone the whole repository as a submodule into your project, In your CMakelists.txt, add the following lines:
add_subdirectory(pocketpy)
target_link_libraries(<your_target> pocketpy)
See CMakeLists.txt for details.
It is safe to use main
branch in production if CI badge is green.
Compile flags
To compile it with your project, these flags must be set:
--std=c11
flag must be set- For MSVC,
/utf-8
flag must be set
Get prebuilt binaries
We have prebuilt binaries, check them out on our GitHub Actions.
You can download an artifact there which contains the following files.
├── android
│ ├── arm64-v8a
│ │ └── libpocketpy.so
│ ├── armeabi-v7a
│ │ └── libpocketpy.so
│ └── x86_64
│ └── libpocketpy.so
├── ios
│ └── libpocketpy.a
├── linux
│ └── x86_64
│ ├── libpocketpy.so
│ └── main
├── macos
│ └── pocketpy.bundle
│ └── Contents
│ ├── Info.plist
│ └── MacOS
│ └── pocketpy
└── windows
└── x86_64
├── main.exe
└── pocketpy.dll
Example
#include "pocketpy.h"
#include <stdio.h>
static bool int_add(int argc, py_Ref argv) {
PY_CHECK_ARGC(2);
PY_CHECK_ARG_TYPE(0, tp_int);
PY_CHECK_ARG_TYPE(1, tp_int);
py_i64 a = py_toint(py_arg(0));
py_i64 b = py_toint(py_arg(1));
py_newint(py_retval(), a + b);
return true;
}
int main() {
// Initialize pocketpy
py_initialize();
// Hello world!
bool ok = py_exec("print('Hello world!')", "<string>", EXEC_MODE, NULL);
if(!ok) goto __ERROR;
// Create a list: [1, 2, 3]
py_Ref r0 = py_getreg(0);
py_newlistn(r0, 3);
py_newint(py_list_getitem(r0, 0), 1);
py_newint(py_list_getitem(r0, 1), 2);
py_newint(py_list_getitem(r0, 2), 3);
// Eval the sum of the list
py_Ref f_sum = py_getbuiltin(py_name("sum"));
py_push(f_sum);
py_pushnil();
py_push(r0);
ok = py_vectorcall(1, 0);
if(!ok) goto __ERROR;
printf("Sum of the list: %d\n", (int)py_toint(py_retval())); // 6
// Bind native `int_add` as a global variable
py_newnativefunc(r0, int_add);
py_setglobal(py_name("add"), r0);
// Call `add` in python
ok = py_exec("add(3, 7)", "<string>", EVAL_MODE, NULL);
if(!ok) goto __ERROR;
py_i64 res = py_toint(py_retval());
printf("Sum of 2 variables: %d\n", (int)res); // 10
py_finalize();
return 0;
__ERROR:
py_printexc();
py_finalize();
return 1;
}