J'utilise un peu Cython, mais parfois je trouve cela ennuyeux (par exemple, j'ai besoin de setup.py à grande échelle), et j'ai découvert Numba, ce qui facilite l'accélération de Python. N'est-il pas agréable de JIT avec llvm comme Julia? Je l'ai également essayé en référence à l'article suivant. Si vous êtes nouveau sur Numba lui-même, veuillez d'abord consulter le lien.
Pour l'instant, il ne s'agit que de la façon de le mettre en œuvre.
Cela a fonctionné ci-dessous.
sudo easy_install funcsigs enum34 numba
git clone https://github.com/numba/llvmlite
cd llvmlite/
sudo python setup.py install
Veuillez noter ce qui suit.
--llvmlite peut être entré avec easy_install, mais dylib ne suffit pas et une erreur d'exécution (pourquoi?) --En plus de enum34, enum peut être facilement_installé, mais cela provoque une erreur. --Lorsque je l'ai essayé sur Mac OS 10.9, qui est différent de la machine que j'ai essayée en premier, j'ai eu une erreur avec import numba, mais cela a été résolu en réinstallant numpy. Je viens de le construire à partir de github avec la commande suivante sans trop réfléchir ...
```
git clone https://github.com/numpy/numpy.git numpy_temp
cd numpy_temp
python setupegg.py bdist_egg
sudo easy_install dist/*egg
```
~~ Je vais bientôt défier Windows7 avec WinPython2.7, mais je pense que llvm est nécessaire, le support C ++ 11 est probablement nécessaire, 64bit semble être difficile, et il y a beaucoup de murs ... ~~ Anaconda Je l'ai mis et il est passé. Anaconda Je l'ai utilisé pour la première fois, mais si vous avez la possibilité de ronger les calculs numériques ou si vous souhaitez accélérer votre code Python, il semble bon de l'utiliser de manière positive.
J'ajouterai cela plus tard, mais j'oserai l'essayer avec un procédé autre que le calcul numérique. La raison en est que l'effet sur le calcul numérique a déjà été évalué par le prédécesseur mentionné ci-dessus, et il se trouve que je suis en train de faire un programme compliqué de lecture / écriture de données binaires au lieu d'un calcul numérique.
L'utilisation de PyInstaller rend les scripts Python exécutables et facilite leur distribution à d'autres, mais ceux qui utilisent numba donneront l'erreur suivante lors de l'exécution. En effet, PyInstaller ne parvient pas à collecter les fichiers que Python ouvre dynamiquement.
OSError: dlopen(/var/folders/qk/z4x58g2962q21q5570g2hj0c0000gn/T/_MEIRXXAjg/llvmlite/binding/libllvmlite.dylib, 6): image not found
Alors incluons ce dylib dans le résultat de la construction. Vous pouvez contourner le problème en suivant les étapes ci-dessous. PyInstaller utilise la balise github v2.1.
python pyinstaller / pyinstaller.py --onefile test.py. À ce stade, test.spec est créé et en même temps un exe est créé sur la base de ce test.spec, mais cet exe est dans l'état d'erreur ci-dessus.
Ajoutez la ligne suivante à test.spec et indiquez-lui d'incorporer libllvmlite.dylib dans l'exécutable onefiled.
# -*- mode: python -*-
a = Analysis(['test.py'],
pathex=['/path/to/main/script'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
#Une ligne en dessous est ajoutée
a.binaries += [("llvmlite/binding/libllvmlite.dylib", "/Library/Python/2.7/site-packages/llvmlite/binding/libllvmlite.dylib", 'BINARY')]
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='test',
debug=False,
strip=None,
upx=True,
console=True )
Définissez python pyinstaller / pyinstaller.py --clean test.spec et reconstruisez avec le test.spec modifié.
(En supposant que vous avez installé l'environnement dans C: \ Anaconda) Tout d'abord, lorsque vous essayez d'utiliser l'environnement Anaconda avec PyInstaller, vous rencontrerez une erreur indiquant que pywintypes est introuvable quel que soit Numba. Cependant, j'ai pu le résoudre en plaçant la dll à l'emplacement trouvé dans PyInstaller dans Méthode décrite ici.
cd C:\Anaconda\Lib\site-packages\win32\
copy pywintypes27.dll lib\
copy pythoncom27.dll lib\
Après cela, écrivez simplement la méthode d'approvisionnement de llvmlite.dll dans .spec comme dans le cas de Mac. Si vous l'avez installé dans C: \ Anaconda, la ligne que vous devez ajouter devrait ressembler à ceci:
a.binaries += [("llvmlite/binding/llvmlite.dll", "C:\\Anaconda\\Lib\\site-packages\\llvmlite\\binding\\llvmlite.dll", 'BINARY')]
Recommended Posts