Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有使用Python/C API命名为ctypes的模块_Python_C_Ctypes_Python C Api - Fatal编程技术网

没有使用Python/C API命名为ctypes的模块

没有使用Python/C API命名为ctypes的模块,python,c,ctypes,python-c-api,Python,C,Ctypes,Python C Api,我有PythonCode.py: 和CCode.c: PyErr\u Print()打印: Traceback (most recent call last): File ".../PythonCode.py", line 1, in <module> import os, ctypes ImportError: No module named ctypes 为什么Python/C API无法导入ctypes?您将默认的sys.path列表替换为单个路径。相反,您可以插入新

我有PythonCode.py:

和CCode.c:

PyErr\u Print()
打印:

Traceback (most recent call last):   File ".../PythonCode.py", line 1,
  in <module> import os, ctypes
ImportError: No module named ctypes

为什么Python/C API无法导入ctypes?

您将默认的
sys.path
列表替换为单个路径。相反,您可以插入新路径:

PyObject *sys_path, *path;

sys_path = PySys_GetObject("path");
if (sys_path == NULL || !PyList_Check(sys_path)) {   
    /* ZOMG! That's so wrong... */
    return;
}
path = PyString_FromString(path_to_PythonCode);
PyList_Insert(sys_path, 0, path);
Py_DECREF(path);

您将默认的
sys.path
列表替换为单个路径。相反,您可以插入新路径:

PyObject *sys_path, *path;

sys_path = PySys_GetObject("path");
if (sys_path == NULL || !PyList_Check(sys_path)) {   
    /* ZOMG! That's so wrong... */
    return;
}
path = PyString_FromString(path_to_PythonCode);
PyList_Insert(sys_path, 0, path);
Py_DECREF(path);

这看起来很像Python中的一个经典循环导入问题,只需通过C语言就可以实现。您尝试在C中导入Python模块,但是Python模块正在尝试将C库导入CyType的一部分,因此,在解释器有机会完全构造它之前,您最终尝试从SysMe模块获得cType,因为C代码仍然在执行中。这并不是说它不存在,而是在您试图在程序流中访问它的时候,模块的状态不完整,因此既没有加载也没有加载。您将默认的
sys.path
列表替换为单个路径。相反,您可以附加或插入新路径:
PyObject*sysPath=PySys\u GetObject(“路径”);PyObject*path=PyString\u FromString(路径到PythonCode);PyList_Append(系统路径,路径);//或PyList_插入(sysPath,0,path)(需要错误处理)。@eryksun:谢谢!成功了!你为什么在评论中回答?@AlexP:我只是在等着看是否有人会写一个更完整的答案。我将添加它作为答案。这看起来可疑地像Python中的一个经典循环导入问题,只需要通过C来实现。您尝试在C中导入Python模块,但是Python模块正在尝试将C库导入CyType的一部分,因此,在解释器有机会完全构造它之前,您最终尝试从SysMe模块获得cType,因为C代码仍然在执行中。这并不是说它不存在,而是在您试图在程序流中访问它的时候,模块的状态不完整,因此既没有加载也没有加载。您将默认的
sys.path
列表替换为单个路径。相反,您可以附加或插入新路径:
PyObject*sysPath=PySys\u GetObject(“路径”);PyObject*path=PyString\u FromString(路径到PythonCode);PyList_Append(系统路径,路径);//或PyList_插入(sysPath,0,path)(需要错误处理)。@eryksun:谢谢!成功了!你为什么在评论中回答?@AlexP:我只是在等着看是否有人会写一个更完整的答案。我会加上它作为答案。
$ python --version
Python 2.7.1
$ python PythonCode.py
ctypes are imported
PyObject *sys_path, *path;

sys_path = PySys_GetObject("path");
if (sys_path == NULL || !PyList_Check(sys_path)) {   
    /* ZOMG! That's so wrong... */
    return;
}
path = PyString_FromString(path_to_PythonCode);
PyList_Insert(sys_path, 0, path);
Py_DECREF(path);