No Modul named ctypes mit Python/C-API

Habe ich PythonCode.py:

import os, ctypes
print "ctypes are imported"

Und CCode.c:

...
PySys_SetPath(path_to_PythonCode);
PyObject *pModule = PyImport_ImportModule("PythonCode");
if (!pModule) {
  PyErr_Print();
  return;
}
...

PyErr_Print() Drucke:

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

Ausführung von Python-code in terminal zeigt, dass ctypes gibt es:

$ python --version
Python 2.7.1
$ python PythonCode.py
ctypes are imported

Warum Python/C-API kann nicht import ctypes?

  • Das sieht verdächtig nach einem klassischen Rundschreiben-import-problem in Python, nur eine Reise durch C, um dorthin zu gelangen. Sie versuchen, importieren Sie die Python-module in C, aber das Python-Modul importieren möchten, die C-Bibliothek als Teil der ctypes, so dass Sie am Ende versuchen, um ctypes aus sys.Module vor der interpreter hat eine chance hatte, völlig konstruieren, da der C-code ist immer noch in der Mitte ausführen. Es ist nicht so, dass es nicht vorhanden ist, sondern dass an der Stelle, die Sie versuchen, Zugriff im Programm flow, der Zustand des Moduls ist unvollständig, und so werden beide entladen und ladbar.
  • Sie ersetzt die Standard - sys.path Liste mit einem einzigen Pfad. Stattdessen können Sie "Anhängen" oder "einfügen" den neuen Pfad: PyObject *sysPath = PySys_GetObject("path"); PyObject *path = PyString_FromString(path_to_PythonCode); PyList_Append(sysPath, path); // or PyList_Insert(sysPath, 0, path); (muss Fehlerbehandlung).
  • Danke!!! Das war der trick! Warum sind Sie beantworten in den Kommentaren?
  • Ich war gerade warten, um zu sehen, ob jemand anderes im Begriff war zu schreiben, eine vollständige Antwort. Ich werde es als Antwort.
InformationsquelleAutor AlexP | 2012-12-20
Schreibe einen Kommentar