mirror of
https://github.com/exaloop/codon.git
synced 2025-06-03 15:03:52 +08:00
Fix Jupyter Python support
This commit is contained in:
parent
dfb516aad9
commit
0fd028bc52
@ -79,7 +79,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
~CaptureOutput() {
|
~CaptureOutput() {
|
||||||
seqassert(dup2(saved, STDOUT_FILENO) != -1, "IO error when capturing stdout");
|
// seqassert(dup2(saved, STDOUT_FILENO) != -1, "IO error when capturing stdout");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -9,6 +9,7 @@ from C import dlsym(cobj, cobj) -> cobj as c_dlsym
|
|||||||
from C import dlclose(cobj) -> i32 as c_dlclose
|
from C import dlclose(cobj) -> i32 as c_dlclose
|
||||||
RTLD_NOW = 2
|
RTLD_NOW = 2
|
||||||
RTLD_GLOBAL = 8 if seq_is_macos() else 256
|
RTLD_GLOBAL = 8 if seq_is_macos() else 256
|
||||||
|
RTLD_LOCAL = 0 if seq_is_macos() else 256
|
||||||
|
|
||||||
def dlext():
|
def dlext():
|
||||||
if seq_is_macos():
|
if seq_is_macos():
|
||||||
@ -26,8 +27,12 @@ def dlopen(name: str, flag: int = RTLD_NOW | RTLD_GLOBAL) -> cobj:
|
|||||||
raise CError(dlerror())
|
raise CError(dlerror())
|
||||||
return h
|
return h
|
||||||
|
|
||||||
def dlsym[Fn](lib: str, name: str) -> Fn:
|
def dlsym[Fn](lib, name: str) -> Fn:
|
||||||
h = dlopen(lib)
|
h = cobj()
|
||||||
|
if isinstance(lib, str):
|
||||||
|
h = dlopen(lib)
|
||||||
|
else:
|
||||||
|
h = lib
|
||||||
fn = c_dlsym(h, name.c_str())
|
fn = c_dlsym(h, name.c_str())
|
||||||
if fn == cobj():
|
if fn == cobj():
|
||||||
raise CError(dlerror())
|
raise CError(dlerror())
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
from internal.dlopen import dlext
|
from internal.dlopen import *
|
||||||
|
|
||||||
PyUnicode_AsEncodedString = Function[[cobj, cobj, cobj], cobj](cobj())
|
PyUnicode_AsEncodedString = Function[[cobj, cobj, cobj], cobj](cobj())
|
||||||
PyBytes_AsString = Function[[cobj], cobj](cobj())
|
PyBytes_AsString = Function[[cobj], cobj](cobj())
|
||||||
@ -45,75 +45,76 @@ def init():
|
|||||||
return
|
return
|
||||||
|
|
||||||
LD = os.getenv('CODON_PYTHON', default='libpython.' + dlext())
|
LD = os.getenv('CODON_PYTHON', default='libpython.' + dlext())
|
||||||
|
hnd = dlopen(LD, RTLD_LOCAL | RTLD_NOW)
|
||||||
|
|
||||||
global PyUnicode_AsEncodedString
|
global PyUnicode_AsEncodedString
|
||||||
PyUnicode_AsEncodedString = _dlsym(LD, "PyUnicode_AsEncodedString")
|
PyUnicode_AsEncodedString = dlsym(hnd, "PyUnicode_AsEncodedString")
|
||||||
global PyBytes_AsString
|
global PyBytes_AsString
|
||||||
PyBytes_AsString = _dlsym(LD, "PyBytes_AsString")
|
PyBytes_AsString = dlsym(hnd, "PyBytes_AsString")
|
||||||
global PyErr_Fetch
|
global PyErr_Fetch
|
||||||
PyErr_Fetch = _dlsym(LD, "PyErr_Fetch")
|
PyErr_Fetch = dlsym(hnd, "PyErr_Fetch")
|
||||||
global PyObject_GetAttrString
|
global PyObject_GetAttrString
|
||||||
PyObject_GetAttrString = _dlsym(LD, "PyObject_GetAttrString")
|
PyObject_GetAttrString = dlsym(hnd, "PyObject_GetAttrString")
|
||||||
global PyObject_GetAttr
|
global PyObject_GetAttr
|
||||||
PyObject_GetAttr = _dlsym(LD, "PyObject_GetAttr")
|
PyObject_GetAttr = dlsym(hnd, "PyObject_GetAttr")
|
||||||
global PyObject_Str
|
global PyObject_Str
|
||||||
PyObject_Str = _dlsym(LD, "PyObject_Str")
|
PyObject_Str = dlsym(hnd, "PyObject_Str")
|
||||||
global PyRun_SimpleString
|
global PyRun_SimpleString
|
||||||
PyRun_SimpleString = _dlsym(LD, "PyRun_SimpleString")
|
PyRun_SimpleString = dlsym(hnd, "PyRun_SimpleString")
|
||||||
global Py_IncRef
|
global Py_IncRef
|
||||||
Py_IncRef = _dlsym(LD, "Py_IncRef")
|
Py_IncRef = dlsym(hnd, "Py_IncRef")
|
||||||
global Py_DecRef
|
global Py_DecRef
|
||||||
Py_DecRef = _dlsym(LD, "Py_DecRef")
|
Py_DecRef = dlsym(hnd, "Py_DecRef")
|
||||||
global PyObject_Call
|
global PyObject_Call
|
||||||
PyObject_Call = _dlsym(LD, "PyObject_Call")
|
PyObject_Call = dlsym(hnd, "PyObject_Call")
|
||||||
global PyObject_SetAttrString
|
global PyObject_SetAttrString
|
||||||
PyObject_SetAttrString = _dlsym(LD, "PyObject_SetAttrString")
|
PyObject_SetAttrString = dlsym(hnd, "PyObject_SetAttrString")
|
||||||
global PyObject_Length
|
global PyObject_Length
|
||||||
PyObject_Length = _dlsym(LD, "PyObject_Length")
|
PyObject_Length = dlsym(hnd, "PyObject_Length")
|
||||||
global Py_Initialize
|
global Py_Initialize
|
||||||
Py_Initialize = _dlsym(LD, "Py_Initialize")
|
Py_Initialize = dlsym(hnd, "Py_Initialize")
|
||||||
global PyImport_ImportModule
|
global PyImport_ImportModule
|
||||||
PyImport_ImportModule = _dlsym(LD, "PyImport_ImportModule")
|
PyImport_ImportModule = dlsym(hnd, "PyImport_ImportModule")
|
||||||
global PyLong_FromLong
|
global PyLong_FromLong
|
||||||
PyLong_FromLong = _dlsym(LD, "PyLong_FromLong")
|
PyLong_FromLong = dlsym(hnd, "PyLong_FromLong")
|
||||||
global PyLong_AsLong
|
global PyLong_AsLong
|
||||||
PyLong_AsLong = _dlsym(LD, "PyLong_AsLong")
|
PyLong_AsLong = dlsym(hnd, "PyLong_AsLong")
|
||||||
global PyFloat_FromDouble
|
global PyFloat_FromDouble
|
||||||
PyFloat_FromDouble = _dlsym(LD, "PyFloat_FromDouble")
|
PyFloat_FromDouble = dlsym(hnd, "PyFloat_FromDouble")
|
||||||
global PyFloat_AsDouble
|
global PyFloat_AsDouble
|
||||||
PyFloat_AsDouble = _dlsym(LD, "PyFloat_AsDouble")
|
PyFloat_AsDouble = dlsym(hnd, "PyFloat_AsDouble")
|
||||||
global PyBool_FromLong
|
global PyBool_FromLong
|
||||||
PyBool_FromLong = _dlsym(LD, "PyBool_FromLong")
|
PyBool_FromLong = dlsym(hnd, "PyBool_FromLong")
|
||||||
global PyObject_IsTrue
|
global PyObject_IsTrue
|
||||||
PyObject_IsTrue = _dlsym(LD, "PyObject_IsTrue")
|
PyObject_IsTrue = dlsym(hnd, "PyObject_IsTrue")
|
||||||
global PyUnicode_DecodeFSDefaultAndSize
|
global PyUnicode_DecodeFSDefaultAndSize
|
||||||
PyUnicode_DecodeFSDefaultAndSize = _dlsym(LD, "PyUnicode_DecodeFSDefaultAndSize")
|
PyUnicode_DecodeFSDefaultAndSize = dlsym(hnd, "PyUnicode_DecodeFSDefaultAndSize")
|
||||||
global PyTuple_New
|
global PyTuple_New
|
||||||
PyTuple_New = _dlsym(LD, "PyTuple_New")
|
PyTuple_New = dlsym(hnd, "PyTuple_New")
|
||||||
global PyTuple_SetItem
|
global PyTuple_SetItem
|
||||||
PyTuple_SetItem = _dlsym(LD, "PyTuple_SetItem")
|
PyTuple_SetItem = dlsym(hnd, "PyTuple_SetItem")
|
||||||
global PyTuple_GetItem
|
global PyTuple_GetItem
|
||||||
PyTuple_GetItem = _dlsym(LD, "PyTuple_GetItem")
|
PyTuple_GetItem = dlsym(hnd, "PyTuple_GetItem")
|
||||||
global PyList_New
|
global PyList_New
|
||||||
PyList_New = _dlsym(LD, "PyList_New")
|
PyList_New = dlsym(hnd, "PyList_New")
|
||||||
global PyList_SetItem
|
global PyList_SetItem
|
||||||
PyList_SetItem = _dlsym(LD, "PyList_SetItem")
|
PyList_SetItem = dlsym(hnd, "PyList_SetItem")
|
||||||
global PyList_GetItem
|
global PyList_GetItem
|
||||||
PyList_GetItem = _dlsym(LD, "PyList_GetItem")
|
PyList_GetItem = dlsym(hnd, "PyList_GetItem")
|
||||||
global PySet_New
|
global PySet_New
|
||||||
PySet_New = _dlsym(LD, "PySet_New")
|
PySet_New = dlsym(hnd, "PySet_New")
|
||||||
global PySet_Add
|
global PySet_Add
|
||||||
PySet_Add = _dlsym(LD, "PySet_Add")
|
PySet_Add = dlsym(hnd, "PySet_Add")
|
||||||
global PyDict_New
|
global PyDict_New
|
||||||
PyDict_New = _dlsym(LD, "PyDict_New")
|
PyDict_New = dlsym(hnd, "PyDict_New")
|
||||||
global PyDict_SetItem
|
global PyDict_SetItem
|
||||||
PyDict_SetItem = _dlsym(LD, "PyDict_SetItem")
|
PyDict_SetItem = dlsym(hnd, "PyDict_SetItem")
|
||||||
global PyDict_Next
|
global PyDict_Next
|
||||||
PyDict_Next = _dlsym(LD, "PyDict_Next")
|
PyDict_Next = dlsym(hnd, "PyDict_Next")
|
||||||
global PyObject_GetIter
|
global PyObject_GetIter
|
||||||
PyObject_GetIter = _dlsym(LD, "PyObject_GetIter")
|
PyObject_GetIter = dlsym(hnd, "PyObject_GetIter")
|
||||||
global PyIter_Next
|
global PyIter_Next
|
||||||
PyIter_Next = _dlsym(LD, "PyIter_Next")
|
PyIter_Next = dlsym(hnd, "PyIter_Next")
|
||||||
|
|
||||||
Py_Initialize()
|
Py_Initialize()
|
||||||
_PY_INITIALIZED = True
|
_PY_INITIALIZED = True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user