J'utilise Cython pour générer du code plus rapide pour un modèle mathématique. J'ai du mal à compiler le code, mais j'ai quand même réussi à le faire avec un .bat:
setlocal EnableDelayedExpansion
CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release
set DISTUTILS_USE_SDK=1
C:\Python27\python.exe C:\gcsilve\trunk\myproject\myproject\cythonsetup.py build_ext --inplace
PAUSE
Ça fonctionne bien ...
Ma question concerne pyximport. J'ai un ancien code écrit par quelqu'un d'autre qui utilise pyximport.install (). Je ne pouvais pas comprendre ce que cela faisait et pourquoi je devais l'utiliser, puisque je compile déjà le code moi-même. Alors, quelqu'un peut-il m'expliquer de manière très simple (pour les nuls) ce que fait pyximport?
Informations complémentaires: j'ai un projet1 sous cython. J'ai un projet2, qui référence project1.
pyximport fait partie de Cython et est utilisé à la place de import
.
Si votre module ne nécessite pas de bibliothèques C supplémentaires ni d’installation particulière, vous pouvez utiliser le module pyximport pour charger des fichiers .pyx directement à l’importation, sans avoir à écrire un fichier setup.py. Il peut être utilisé comme ceci:
>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World
Directement depuis le documentation Cython
Vous pouvez utiliser pyximport
pour recompiler et recharger automatiquement votre module .pyx
.
Supprimez ce que setup.py
a généré, sinon vous pourriez charger ce module d'extension. pyximport
n'utilise pas setup.py
.
Supposons un hello.pyx
avec une fonction mean2
.
Démarrer IPython.
In [1]: import pyximport
In [2]: pyximport.install(reload_support=True)
In [3]: from importlib import reload
In [4]: import hello
In [5]: hello.mean2(2,3)
Le résultat:
Out [5]: 2.5
Quittez cette fenêtre et allez dans votre éditeur pour changer hello.pyx
.
Revenez ensuite à IPython et tapez
In [6]: reload(hello);import hello;hello.mean2(2,3)
Vous verrez un texte informant sur la recompilation. Puis le nouveau résultat:
Out[6]: 'Mean of 2 and 3 is 2.5'