Compiler kann Py_InitModule () nicht finden .. ist es veraltet und wenn ja, was soll ich verwenden?

7

Ich versuche eine C-Erweiterung für Python zu schreiben. Mit dem Code (unten) bekomme ich die Compiler-Warnung:

%Vor%

Und es schlägt zur Laufzeit mit diesem Fehler fehl:

%Vor%

Ich habe buchstäblich stundenlang nach einer Lösung ohne Freude gesucht. Ich habe mehrere geringfügige Änderungen an der Syntax versucht, ich habe sogar einen Beitrag gefunden, der andeutet, dass die Methode veraltet ist. Ich finde jedoch keinen Ersatz.

Hier ist der Code:

%Vor%

Wenn es hier hilft, ist meine setup.py:

%Vor%

Und der Testcode in test.py:

%Vor%

Jede Hilfe wäre sehr, sehr geschätzt.

    
Sam Redway 03.02.2015, 18:05
quelle

2 Antworten

21

Der Code, den Sie haben, würde in Python 2.x funktionieren, aber Py_InitModule wird in Python 3.x nicht mehr verwendet. Heutzutage erstellen Sie eine PyModuleDef -Struktur und übergeben dann einen Verweis darauf zu PyModule_Create .

Die Struktur würde wie folgt aussehen:

%Vor%

Und dann würde Ihre PyMODINIT_FUNC Funktion wie folgt aussehen:

%Vor%

Beachten Sie, dass der Name der Funktion PyMODINIT_FUNC die Form PyInit_<name> haben muss, wobei <name> der Name Ihres Moduls ist.

Ich denke, es wäre lohnenswert, wenn Sie Erweitern in der Dokumentation zu Python 3.x lesen. Es hat eine detaillierte Beschreibung, wie Erweiterungsmodule in modernen Python zu erstellen.

    
iCodez 03.02.2015, 18:40
quelle
0

Ich hatte das gleiche Problem mit Py_InitModule (). Ich habe mit den oben genannten Python 3-Dokumenten begonnen, insbesondere mit dem Dokument "Python-Interpreter erweitern und einbetten". Aber das Kapitel dieses Dokuments mit dem Titel "Ein einfaches Beispiel" lässt Details aus. Damit. Ich googelte diesen schlauen Vortrag:

Ссылка

ist in vielerlei Hinsicht besser geeignet für jemanden, der mit Python-C-API-Erweiterungen neu ist ... außer es wurde nicht für Python v3 aktualisiert. Also ... konsultieren Sie die scipy-Vorlesung, die Python-3-Dokumentation und diese StackOverflow-Diskussion, in der Sie die relevanten Informationen für Ihre Bedürfnisse auslesen.

    
Istlota 05.05.2016 03:20
quelle

Tags und Links