[[Vorlage(Getestet, xenial,)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis()]] [[Bild(nuitka_logo.png, align=left)]] [http://nuitka.net/ Nuitka] {en} ist ein Compiler für [:Python:], der vollständig kompatibel zur Referenzimplementierung CPython ist. Nuitka kann sowohl einzelne Python-Module kompilieren als auch vollständige, direkt ausführbare Binärdateien erzeugen. Technisch gesehen übersetzt Nuitka das Python-Skript in C-Code und linkt diesen gegen '''libpython'''. Der C-Code wird also immer noch von Python ausgeführt. Wird eine ausführbare Datei erzeugt, wird neben der Datei an sich noch ein Unterverzeichnis mit den zugehörigen (ebenfalls kompilierten) Python-Modulen erzeugt. Nuitka kann aktuell keine monolithischen Dateien, welche den kompletten benötigten Code enthalten, erzeugen. Weitere Details, auch zum Stand der Implementierung und Entwicklung, sind auf der Seite [http://nuitka.net/pages/overview.html What is Nuitka?] {en} zu finden. Auch wenn Nuitka C-Code erzeugt, laufen die Programme, welche kompiliert werden, aufgrund des oben erklärten Weges, den Nuitka geht, nicht unbedingt schneller als der Bytecode-Interpreter der Referenzimplementierung CPython. = Installation = Nuitka ist in den Paketquellen enthalten, allerdings in einer vergleichsweise alten Version. Von daher empfiehlt sich eher die manuelle Installation, da neuere Versionen eine bessere Kompatibilität zu CPython haben sowie weitere Optimierungen enthalten. == Voraussetzung == Nuitka benötigt zwingend eine installierte Python-Version 3.5 (oder 2.7 für Python 2), was bei Ubuntu standardmäßig der Fall ist. Des Weiteren werden die Pakete[1] {{{#!vorlage Paketinstallation python3-dev build-essential }}} benötigt. Wer für Python 2.7 kompilieren will, der benötigt statt '''python3-dev''' das Paket '''python-dev'''. == aus den Paketquelle == Nuitka kann über das Paket {{{#!vorlage Paketinstallation nuitka, universe }}} installiert werden[1]. == manuelle Installation == Nuitka lässt sich auch über [:pip:] installieren[2]: {{{#!vorlage Befehl pip3 install --user nuitka #für Python 3 pip install --user nuitka #für Python 2 }}} Im obigen Beispiel erfolgt die Installation lokal für den aktuellen Benutzer. Soll das Programm systemweit installiert werden, muss der oben genannte Befehl mit Root-Rechten ausgeführt werden[3]. Auf der [http://nuitka.net/pages/download.html Downloadseite von Nuitka] {en} werden noch weitere Installationsmöglichkeiten aufgeführt. = Nutzung = Nuitka wird wie folgt aufgerufen: {{{#!vorlage Befehl nuitka [OPTIONEN] QUELLDATEI.py }}} Gibt man keinerlei Optionen an, wird einfach nur das Python-Skript '''QUELLDDATEI.py''' kompiliert. Mögliche Module, die '''QUELLDATEI.py''' importiert, werden dabei nicht mit übersetzt. Um diese mit zu kompilieren, was in der Regel sinnvoll ist, muss die Option `--recurse-all` genutzt werden. Möchte man eine ausführbare Datei erzeugen, dann muss man die Option `--standalone` genutzt werden. Die erzeugte Datei hat den Namen der Quelldatei, aber mit der Dateiendung '''.exe''', außerdem werden diverse Dateien in einem Verzeichnis mit dem Namen der Quelldatei und der Endung '''.dist''' abgelegt. Die exe-Datei ist unter Ubuntu ausführbar, aber - entgegen des Namens - nicht unter Windows. Mit Nuitka kompilierte Dateien können nur auf der gleichen Plattform (also z.B. Linux) weiter gegeben werden. Dazu muss die exe-Datei und das dist-Verzeichnis weiter gegeben werden, die exe-Datei alleine ist nicht nutzbar. Weitere Optionen und Hinweise zur Nutzung von Nuitka findet man in der [http://nuitka.net/doc/user-manual.html Dokumentation] {en}. = Alternativen = Mit der Kombination [http://cython.org/ Cython] {en} und [:GCC:] lassen monolithische, ausführbare Binärdateien erzeugen. Wenn es um die Beschleunigung der Ausführung eines Python-Skripts geht, sind [:PyPy:] oder [https://numba.pydata.org/ numba] {en} deutlich schneller als eine mit Nuitka kompilierte Datei. = Links = * [http://nuitka.net/ Homepage] {en} von Nuitka * [wikipedia_en:Nuitka:Artikel] im englischen Wikipedia #tag: Programmierung, Python