Ich versuche, direkten Zugriff auf numpy
Funktionen random/randomkit.h
, Zufallsgeneratoren in einer Multithread-Anwendung mit Cython (d. H. Ohne die Gil) zu verwenden.Cython: dynamische "cdef extern von xxx"
Zu diesem Zweck Ich versuche, die Header-Datei aus numpy Ordnern mit dem folgenden Code zuzugreifen:
import os
import numpy
str_rkdir = os.path.dirname(os.path.abspath(numpy.__file__))
str_randomkit_h = str_rkdir + "/random/randomkit.h"
cdef extern from str_randomkit_h:
ctypedef struct rk_state
cdef unsigned long rk_random(rk_state * state) nogil
cdef signed long rk_gauss(rk_state * state) nogil
cdef void rk_seed(unsigned long seed, rk_state * state) nogil
Allerdings funktioniert das nicht mit pyximport
weil cython der str_randomkit_h
String beklagt (Ich denke, es doesn interpretiere den Python-Code nicht vor dem Kompilieren ... gibt es einen einfachen Weg dazu?
Als eine dreckige Workaround, bin ich dynamisch generieren die .pxd
vor der Cython-Compilation, aber das ist nicht wirklich nett, so dass ich mich fragte, ob es einen besseren Weg, es zu tun war.
Diese Art von Sache wird normalerweise durch das Build-Skript behandelt. Kann "setup.py" die richtigen Verzeichnisse zum Build-Pfad hinzufügen? –
Ok, ich verstehe was du meinst! Die Tatsache ist (und ich hätte das wahrscheinlich spezifiziert) Ich benutze pyximport für Bequemlichkeit und ich denke, das erfordert den absoluten Pfad, aber ich werde wieder überprüfen – Silmathoron