
如题 我的 c++代码:
#include <Python.h> #include <iostream> #include <marshal.h> using namespace std; int main(){ PyObject *pName, *pModule, *pFunc; PyObject *pArgs, *pValue; //cout<<233<<endl; Py_Initialize(); FILE *fff = fopen("./a.pyc","br"); pModule = PyMarshal_ReadObjectFromFile(fff); //Py_DECREF(pModule); //cout<<PyCode_GetNumFree(pModule); //PyImport_ExecCodeModule("asd",pModule); pValue = PyLong_FromLong(123); cout<<PyCode_Check(pModule); return 0; } 只要运行了 PyCode_Check(pModule) 就会导致段错误 进一步测试发现 只要调用 pModule->ob_type 就会导致段错误 同时 a.pyc 文件在 python 中使用 marshal.load 读取 运行 是完全正常的
环境: macos 10.13 测试过 homebrew 的 python 以及 miniconda 的 python 均有这个问题
该如何解决?
1 leoleoasd OP docker 内运行就能解决这个问题 同时还有个坑: 网上都说 pyc 文件前 8 字节是文件头要去掉 但是 python3.7 中是 16 字节 |