Ich bin neu in Cython. Ich habe eine Quellcodedatei hello.pyx
:cpdef in Cython-Tutorials funktioniert nicht
cdef extern from "math.h":
cpdef double sin(double x)
und meine setup.py
Datei ist:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
ext_modules=[
Extension("hello",
sources=["hello.pyx"],
libraries=["m"] # Unix-like specific
)
]
setup(
name = "Demos",
ext_modules = cythonize(ext_modules)
)
ich es dann zu einem .so
zusammengestellt.
Aber, wenn ich import hello
, bekomme ich nicht die hello.sin
Funktion.
Also was ist der Zweck von "Hier ist ein Cython-Modul, das direkten Zugriff auf die C sin()
Funktion für Python-Code bietet:" in der Anleitung geschrieben?
Ich verfolge die official tutorial auf externen Deklarationen.
Ergebnisse für die Ausführung von cythoning:
Compiling hello.pyx because it changed.
Cythonizing hello.pyx
running build_ext
building 'hello' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall-Wstrict-prototypes -fPIC -I/pool/software/python/python27plus-ibm/include/python2.7 -c hello.c -o build/temp.linux-x86_64-2.7/hello.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/hello.o -L/proj/dist/sandbox/miniconda/lib -lm -lpython2.7 -o /home/shaowu/Documents/cython_play/hello.so
Also wird das Modul importiert, aber es gibt keine 'sin' Funktion? Wenn Sie versuchen, auf "hello.sin" zuzugreifen, erhalten Sie einen 'AttributError'? –
@Jim Korrigieren. Wenn ich 'dir (hallo)' tue, gibt es keine "Sünde", ich weiß nicht warum ... – Shaowu
Ich würde die Version überprüfen, die du verwendest. Mein Eindruck ist, dass dies vor ein paar Jahren hinzugefügt wurde, vielleicht sind Sie also veraltet. – DavidW