i recht neu bin Cython, weiß jemand, wie ein Python-Projekt über Cython zu kompilieren (mit relativ geringer Overhead), da ich die folgenden Importfehler werden immer:compling Python-Paket über Cython
ImportError: No module named CythonRelated.testSource.MyClassObject
Mein Testprojektstruktur ist wie folgt:
CythonRelated/
setup.py
testSource/
MainCythonTest.py
MyClassObject.py
MainCythonTest.pyx
MyClassObject.pyx
Wo MainCythonTest Einfuhren Klasse von MyClassObject Modul (via
from CythonRelated.testSource.MyClassObject import myCustomObj
), initialisiert ein Objekt und ruft eine Objektmethode auf.
sieht mein setup.py wie folgt aus:
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
setup(
name = "My cython test app",
ext_modules = cythonize("testSource/*.pyx", include_path = ["."]),
packages = ["CythonRelated", "CythonRelated.testSource"]
)
Was bin ich?
Unter setup.py außerhalb CythonRelated (und natürlich den entsprechenden Pfad von * .pyx Dateien in cythonize Aktualisierung) nicht helfen, entweder
MyClassObject.py
import sys
print sys.version_info
class myCustomObj():
def __init__(self, value):
self.value_ = value
def classInfo(self):
print "calling class {0} object with value of {1}".format(self.__class__.__name__,
self.value_)
MainCythonTest.py
import pyximport; pyximport.install()
from CythonRelated.testSource.MyClassObject import myCustomObj
def myFunc():
aObj = myCustomObj(12)
bObj = myCustomObj(21)
bObj.classInfo()
aObj.classInfo()
print "myFunc called"
myFunc()
Danke - aber dann scheint es, dass Python nicht die kompilierten Versionen dauert. Versuchen Sie, die .py-Dateien zu entfernen und nur mit .pyx zu installieren. Sie können die Module nicht finden, wenn Sie sie importieren (obwohl die Installation fehlerfrei verläuft). Oder müssen Sie die .py-Dateien immer behalten? Wie können Sie sicher sein, dass es dann die kompilierte Version nimmt? Ich sah das: http://Stackoverflow.com/questions/6584457/what-is-the-precedence-of-python-compiled-files-in-imports aber irgendwie ... – schmi
Ok, ich habe das nicht verstanden. Ich habe nur den Inhalt für die '.pyx' Datei kopiert. Wenn Sie eine '.py'-Datei" cythonisieren ", muss die' .py'-Datei nicht beibehalten werden. Sie können es einfach entfernen. –