Ich habe Cython ziemlich oft benutzt, aber manchmal finde ich es ärgerlich (zum Beispiel brauche ich setup.py in großem Maßstab), und ich habe etwas über Numba herausgefunden, was es einfacher macht, Python zu beschleunigen. Ist es nicht schön, mit llvm wie Julia JIT zu machen? Ich habe es auch mit Bezug auf den folgenden Artikel versucht. Wenn Sie Numba selbst noch nicht kennen, lesen Sie bitte zuerst den Link.
Im Moment geht es nur darum, wie man es implementiert.
Es hat unten funktioniert.
sudo easy_install funcsigs enum34 numba
git clone https://github.com/numba/llvmlite
cd llvmlite/
sudo python setup.py install
Bitte beachten Sie Folgendes.
--llvmlite kann mit easy_install eingegeben werden, aber dylib ist nicht genug und ein Laufzeitfehler (warum?)
Zusätzlich zu enum34 kann enum leicht installiert werden, verursacht jedoch einen Fehler.
Als ich es auf einem anderen Mac OS 10.9 als dem Computer ausprobiert habe, den ich zuerst ausprobiert habe, ist beim Importieren von numba ein Fehler aufgetreten, der jedoch durch die Neuinstallation von numpy behoben wurde. Ich habe es gerade aus Github mit dem folgenden Befehl erstellt, ohne zu viel nachzudenken ...
git clone https://github.com/numpy/numpy.git numpy_temp
cd numpy_temp
python setupegg.py bdist_egg
sudo easy_install dist/*egg
~~ Ich werde Windows7 bald mit WinPython2.7 herausfordern, aber ich denke, dass llvm notwendig ist, C ++ 11-Unterstützung wahrscheinlich notwendig ist, 64bit scheint schwierig zu sein und es gibt viele Wände ... ~~ Anaconda Ich habe es eingegeben und es hat bestanden. Ich habe Anaconda zum ersten Mal verwendet, aber es scheint gut für Leute zu sein, die die Möglichkeit haben, numerische Berechnungen zu nagen oder ihren eigenen Python-Code beschleunigen möchten.
Ich werde dies später hinzufügen, aber ich werde es wagen, es mit einem anderen Prozess als der numerischen Berechnung zu versuchen. Der Grund dafür ist, dass die Auswirkung auf die numerische Berechnung bereits vom oben genannten Vorgänger bewertet wurde und ich zufällig ein kompliziertes Lese- / Schreibprogramm für Binärdaten anstelle einer numerischen Berechnung mache.
Die Verwendung von PyInstaller macht Python-Skripte ausführbar und erleichtert die Verteilung an andere. Bei Verwendung von numba wird jedoch zur Laufzeit der folgende Fehler ausgegeben. Dies liegt daran, dass PyInstaller keine Dateien sammelt, die Python dynamisch öffnet.
OSError: dlopen(/var/folders/qk/z4x58g2962q21q5570g2hj0c0000gn/T/_MEIRXXAjg/llvmlite/binding/libllvmlite.dylib, 6): image not found
Nehmen wir also diese Dylib in das Build-Ergebnis auf. Sie können das Problem umgehen, indem Sie die folgenden Schritte ausführen. PyInstaller verwendet github tag v2.1.
python pyinstaller / pyinstaller.py --onefile test.py. Zu diesem Zeitpunkt wird test.spec erstellt und gleichzeitig wird eine Exe basierend auf dieser test.spec erstellt. Diese Exe befindet sich jedoch im obigen Fehlerzustand.
Fügen Sie test.spec die folgende Zeile hinzu und weisen Sie sie an, libllvmlite.dylib in eine ausführbare Datei mit einer Datei einzubetten.
# -*- mode: python -*-
a = Analysis(['test.py'],
pathex=['/path/to/main/script'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
#Eine Zeile darunter wird hinzugefügt
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 )
Setzen Sie python pyinstaller / pyinstaller.py --clean test.spec und erstellen Sie es mit der geänderten test.spec neu.
(Angenommen, Sie haben die Umgebung in C: \ Anaconda installiert.) Wenn Sie zunächst versuchen, die Anaconda-Umgebung mit PyInstaller zu verwenden, tritt ein Fehler auf, dass Pywintypen unabhängig von Numba nicht gefunden werden können. Ich konnte es jedoch lösen, indem ich die DLL an der Stelle platzierte, die in PyInstaller unter [hier beschriebene Methode] gefunden wurde (http://stackoverflow.com/questions/19280894/py2exe-no-system-module-pywintypes).
cd C:\Anaconda\Lib\site-packages\win32\
copy pywintypes27.dll lib\
copy pythoncom27.dll lib\
Danach schreiben Sie einfach die Beschaffungsmethode von llvmlite.dll in .spec wie im Fall von Mac. Wenn Sie es in C: \ Anaconda installiert haben, sollte die Zeile, die Sie hinzufügen sollten, folgendermaßen aussehen:
a.binaries += [("llvmlite/binding/llvmlite.dll", "C:\\Anaconda\\Lib\\site-packages\\llvmlite\\binding\\llvmlite.dll", 'BINARY')]
Recommended Posts