Skip to content

Instantly share code, notes, and snippets.

@lucasea777
Forked from Artanis/build.sh
Created May 19, 2018 02:15
Show Gist options
  • Save lucasea777/8801440f6b622edd3553c8a7304bf94e to your computer and use it in GitHub Desktop.
Save lucasea777/8801440f6b622edd3553c8a7304bf94e to your computer and use it in GitHub Desktop.
Python C Extension Hello World
gcc -fpic --shared $(python3-config --includes) greetmodule.c -o greet.abi3.so
# can also use $(pkg-config --cflags python-3.5)
# or
# python3 setup.py install --record files.txt --user
#include <Python.h>
static PyObject *
greet_name(PyObject *self, PyObject *args)
{
const char *name;
if (!PyArg_ParseTuple(args, "s", &name))
{
return NULL;
}
printf("Hello %s!\n", name);
Py_RETURN_NONE;
}
static PyMethodDef GreetMethods[] = {
{"greet", greet_name, METH_VARARGS, "Greet an entity."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef greet =
{
PyModuleDef_HEAD_INIT,
"greet", /* name of module */
"", /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */
GreetMethods
};
PyMODINIT_FUNC PyInit_greet(void)
{
return PyModule_Create(&greet);
}
import greet
def main():
greet.greet('World')
if __name__ == "__main__":
main()
from setuptools import setup, Extension
setup(
name='greet',
version='1.0',
description='Python Package with Hello World C Extension',
ext_modules=[
Extension(
'greet',
sources=['greetmodule.c'],
py_limited_api=True)
],
)
@lucasea777
Copy link
Author

git clone -q https://gist.github.com/lucasea777/8801440f6b622edd3553c8a7304bf94e && cd 88* && source build.sh && python3 hello*.py

@panzhongxian
Copy link

👍

@usvi
Copy link

usvi commented Jun 10, 2023

Thank you. You are a lifesaver.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment