web-dev-qa-db-fra.com

Qu'est-ce que pyximport et comment dois-je l'utiliser?

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.

18
guilhermecgs

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

14
Adam Barthelson

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'

1
Roland Puntaier