rispondere alla mia domanda proprio qui:
Diciamo che abbiamo la funzione di fib.pyx:
def fib(n):
"""Print the Fibonacci series up to n."""
a, b = 0, 1
while b < n:
print b,
a, b = b, a + b
Ci sono due modi per compilare ed eseguire questo
Utilizzare un file di installazione. Rendere il file setup.py:
from distutils.core import setup
from Cython.Build import cythonize
ext_options = {"compiler_directives": {"profile": True}, "annotate": True}
setup(
ext_modules = cythonize("fib.pyx", **ext_options)
)
Il ext_options
è incluso qui per generare il file html con annotazioni. Per eseguire questo file devi andare su Strumenti -> Esegui setup.py Task. Quindi digitare build_ext
come nome attività e quando richiesto per Riga di comando tipo di input --inplace
. I file fib.c, fib.o e il file eseguibile fib.so viene generato. Viene inoltre creato il file di annotazione fib.html.
Ora, il seguente codice dovrebbe funzionare in qualsiasi tipo di file python, ad esempio main.py:
import fib
fib.fib(2000)
Il modo più semplice per andare è quello di utilizzare pyximport. Non è necessario alcun file di installazione. Si noti che questo può essere utilizzato solo se "your module doesn’t require any extra C libraries or a special build setup." Il file main.py dovrebbe apparire così:
import pyximport; pyximport.install()
import fib
fib.fib(2000)
Per quanto ho capito la stessa compilazione del codice avviene anche se il fib.c, fib.o e fib.so i file non finiscono nella cartella del progetto. Il codice fib.html non viene generato, ma può essere risolto aggiungendo due righe al file principale. Con le nuove linee main.py è ora:
import pyximport; pyximport.install()
import subprocess
subprocess.call(["cython", "-a", "fib.pyx"])
import fib
fib.fib(2000)
In aggiunta a queste istruzioni, dobbiamo anche garantire che PyCharm sa che il pacchetto fodler contiene un modulo Python, altrimenti l'ignorerà . Vedi https://stackoverflow.com/questions/40203488/pycharm-does-not-recognize-cython-modules-located-in-path – Contango