Wie importiert man eine kompilierte Cython-Datei in eine Pycharm-Python-Datei?Cython-Klasse in Python-Datei importieren Pycharm
Hier ist mein Setup.
Von meinem Projektstammverzeichnis ist die Cython-Klasse "/classes/knn.cpython-35m-x86_64-linux-gnu.so." Meine Python-Datei lautet "/classes/testing_cython_knn.py".
Ich habe eine "__init __.py" Datei in "/ classes /" ...
jedoch PyCharm erkennt nicht die ".so" Datei als eine Datei, die ich importieren. Was muss ich tun, um diese Datei zum Importieren verfügbar zu machen, damit ich sie testen kann?
Derzeit habe ich eine "helloworld.so" Datei in regelmäßigen, terminalbasierten Python ... aber erfolgreich kompiliert und importiert die Funktion I definiert war eine pythonic Funktion ... kein C-Material.
Meine Cythonic Datei ist:
import numpy as np
cimport numpy as np
from scipy.stats import mode
from scipy.spatial.distance import cdist
from threading import Thread
cdef class KNN:
cdef public int k
cdef public str metric
cdef public np.ndarray trainingX
cdef public np.ndarray trainingY
cdef public np.ndarray predict(self,np.ndarray X):
cdef np.ndarray distances,predicted_classes,sorted_distance_indices
distances = cdist(X,self.trainingX,metric=self.metric)
predicted_classes = np.zeros(X.shape[0],dtype=np.float64)
sorted_distance_indices = np.argpartition(distances,self.k,axis=1)[:,:self.k]
predicted_classes,_ = mode(self.trainingY[sorted_distance_indices])
return predicted_classes
Und setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
extensions = [
Extension("knn",["cKNN.pyx"]),
Extension("*",["*.pyx"],include_dirs=[numpy.get_include()])]
setup(ext_modules = cythonize(extensions),include_dirs=[numpy.get_include()])
Derzeit dies nicht auf Import Python auf dem Terminal mit einem Importfehler ausgeführt wird:
Dynamic module does not define module export function (PyInit_knn)
Vielleicht ist es am besten, zuerst PyCharm aus der Gleichung zu entfernen ... können Sie einen Import durchführen, wenn Sie Python von der Kommandozeile ausführen? –
Ok, ich habe eine Helloworld.so in Python auf dem Terminal zu importieren. Wenn ich meine Klasse importiere (für den Fall, dass Sie es nicht sagen können, habe ich gestern angefangen, in Cython zu suchen), bekomme ich einen "ImportError: dynamisches Modul definiert keine Modul-Export-Funktion (PyInit_knn)." – bordeo