Ich weiß, wie man C-Code von Python mit cythonize -o mymodule.c mymodule.py
oder mit dem cython
Befehl machen. Die resultierende C-Datei muss mit gcc oder einem anderen C-Compiler in eine Python-Erweiterung kompiliert werden, und das kann ich auch. Wenn ich es wirklich einfach will, verwende ich einfach distutils
/setuptools
und python setup.py build_ext
.Machen Sie Erweiterung mit Cython, mit einem anderen Namen als die Quelldatei
Aber was ich nicht herausfinden kann ist, wie man eine Erweiterungsdatei (pyd/so) mit einem VERSCHIEDENEN Namen als die Quelldatei erstellt. Ich kann einfach nicht die Datei umbenennen aufgrund der Tatsache, dass es eine Funktion PyInit_modulename
in der Verlängerung zu sein hat, und ich kann nicht modulename.pyd
zu _modulename.pyd
ändern, dass PyInit__modulename
erfordern würde und werfen diese Ausnahme:
ImportError: dynamic module does not define init function (PyInit__modulename)
Grundsätzlich sollte es so sein:
mymodule.py -> _mymodule.pyd
Dies vermeidet z wenn die Import Verwirrung Ich habe zwei Dateien mit dem gleichen Namen, aber ein anderes Ende (py/pyd/pyc/Pyo/so/dll):
mydir/
mymodule.py
mymodule.pyd
Code:
from mymodule import func
func()
# Is this now from the extension or from the python code?
# And how to access tho other one?
Was ich brauche, ist :
mydir/
mymodule.py
_mymodule.pyd <- Note the underscore!
Code:
import mymodule as script
script.func()
# Run the code from the python file
import _mymodule as extension
extension.func()
# Run code from the extension
Aber wie kann ich so kompilieren?
Vielen Dank im Voraus!
Nur ein dachten, ich hätte: Ich glaube, ich brauche irgendwo an der C-Code-Generation mit cython zu starten.
Es scheint, dass der einzige Weg, den Modulnamen, indem Sie den Namen der Datei cython beeinträchtigen das heißt '_modulename.pyx'. –
@ J.J.Hakala - Ja, das dachte ich schon nach ein paar Tagen Forschung. Ich habe dafür ein Skript erstellt, welches automatisch die Datei im temporären Verzeichnis unter einem bestimmten Namen speichert und die Datei kompiliert. – linusg