Wiss. Rechnen » Python
 

Achtung: Diese Seite beschäftigt sich mit dem OMNI-Cluster! Die entsprechende Seite zum HoRUS-Cluster finden Sie hier.


Auf dem Cluster ist Python 3.6.8 installiert. Außerdem sind teilweise bereits vorinstallierte Versionen mancher Python-Pakete wie numpy, scipy und mpi4py verfügbar, wenn die entsprechenden Module geladen werden.

Achtung: Aus Kompatibilitätsgründen ist von Seiten des Betriebssystems noch Python 2.7.17 verfügbar. Python 2 wird seit Anfang 2020 nicht mehr unterstützt und sollte nicht verwendet werden! Alle folgenden Erklärungen beziehen sich auf Python 3 und sind unter Umständen in Python 2 nicht verfügbar.

Eine gute Ressource für Python-Anfänger sind zum Beispiel die Tutorials auf der Python-Website.

Hinweis: Beispielbefehle, die mit $ beginnen, beziehen sich auf die Linux-Konsole, Befehle, die mit >>> beginnen, auf die Python-Konsole. Diese Zeichen müssen bei der Befehlseingabe weggelassen werden.

Alle Informationen auf dieser Seite beziehen sich auf das Default-Python, das Teil des Betriebssystems ist. Diese Python-Installation steht ohne Laden eines Moduls zur Verfügung. Es gibt weitere Python-Installationen, die als Teil von Miniconda oder Jupyter auf dem Cluster installiert sind (mit Miniconda können Sie sogar eigene Python-Installationen in Ihrem Home-Verzeichnis installieren). Wie sie diese benutzen können, ist auf den entsprechenden Seiten für Miniconda und Jupyter beschrieben.

Aufruf von Python

Mit dem Befehl python können Sie die interaktive Konsole aufrufen.

$ python
Python 3.6.8 (default, Apr 16 2020, 01:36:27)
[GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Der Befehl python2 ruft die Python2-Konsole auf.

Um ein Python-Skript auszuführen, geben Sie

$ python <skriptname>

ein. Sie können auch einzelne Python-Befehle ausführen mittels der Option -c:

$ python -c "print('Hello world.'); print('Use semicolons to enter multiple commands.')"

Beachten Sie, dass der gesamte Befehl oder die gesamte Kette von Befehlen von Anführungszeichen (entweder einfachen oder doppelten) umschlossen sein müssen.

Die hier beschriebenen Befehle können selbstverständlich auch in Shell-Skripten (wie zum Beispiel Job-Skripten) verwendet werden.

Python-Pakete

Python-Code ist in Paketen (Packages) organisiert, diese enthalten einzelne Module. Jede Datei mit der Endung .py ist ein Modul, jedes Verzeichnis, das eine Datei __init__.py enthält, ist ein Paket. Im zentralen Python Package Index (PyPI) sind eine große Anzahl von Paketen verfügbar.

Vorinstallierte Pakete

Sie können sich eine Liste aller installierten Pakete anzeigen lassen, indem Sie in der Python-Konsole:

>>> help("modules")

eingeben.

Bestimmte Python-Pakete, die auf dem Cluster oft gebraucht werden, sind durch das Laden der dazugehörigen Module verfügbar. Dabei handelt es sich insbesondere um numpy, scipy und mpi4py. Sie können sich diese Pakete anzeigen lassen mit:

module spider py3

Pakete selbst installieren

Hinweis: auf dem OMNI-Cluster ist auch der Paketmanager Conda installiert, der viele Python-Module ebenfalls installieren kann. Wenn Sie Conda oder die Distribution Anaconda bereits nutzen, können Sie diese stattdessen verwenden, um Pakete zu installieren. Anaconda auf dem OMNI-Cluster ist hier beschrieben.

Benötigen Sie ein Paket, das nicht installiert ist, können Sie es mit dem Programm pip selbst installieren. Dazu geben Sie in der Konsole

$ pip install --user <Paketname>

ein. Das Paket sowie eventuell noch nicht vorhandene Abhängigkeiten werden dann in Ihrem Nutzerverzeichnis installiert, standardmäßig in:

/home/<IhrUsername>/.local/lib/python<Versionsnummer>/site-packages

Pakete in diesem Verzeichnis werden direkt von Python gefunden. Beachten Sie, dass Pakete auf diese Weise nur für Sie nutzbar sind. Sie können ein Python-Modul oder -Paket in einem anderen Python-Skript verwenden, indem Sie es importieren:

>>> import examplemodule

bzw.

>>> from examplepackage import examplemodule

Eigene Software und Umgebungsvariablen

Wenn Sie auf dem Cluster mit von Ihnen selbst in Python geschriebener Software (oder manuell heruntergeladenen Paketen) rechnen wollen, müssen Sie sicherstellen, dass Python Ihre Software findet. Ein Python-Skript, das Ihre Software einbindet wie in diesem Beispiel:

runthis.py
import mysoftware

# Do stuff with mysoftware…

wird mit folgender Fehlermeldung abbrechen:

>>> import mysoftware
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'mysoftware'

Dies liegt daran, dass Python beim Import von Modulen (oder Paketen) nur in definierten Pfaden nach dem Modulnamen sucht. Sie können sich die Liste dieser Pfade ansehen, indem Sie in der Python-Konsole

>>>import sys; print(sys.path)

eingeben. Sie können das Verzeichnis Ihrer Software innerhalb von Python hinzufügen:

>>> sys.path.append(/home/<IhrUsername>/mysoftware)

Empfehlenswerter ist es, die Umgebungsvariable PYTHONPATH zu verwenden, indem Sie sie am Anfang Ihres Job-Skripts setzen und exportieren:

$ export PYTHONPATH=$`PYTHONPATH:/home/<IhrUsername>/mysoftware

In beiden Fällen erfolgt das Hinzufügen zum Suchpfad nur temporär, das heißt so lange, wie Python (im Falle von sys.path) oder Ihr Terminal (im Falle von PYTHONPATH) offen sind. Sie können Pfade permanent zum sys.path hinzufügen, indem Sie in einem bereits zum sys.path gehörenden Verzeichnis eine Datei mit der Endung .pth anlegen, in der Sie die zusätzlichen Verzeichnisse auflisten (eins pro Zeile).

Standardmäßig ist das Einbinden nicht rekursiv, das heißt, selbst wenn Sie ein Verzeichnis zum sys.path oder PYTHONPATH hinzufügen, können Sie Python-Module in Unterverzeichnissen nicht importieren. Wenn das Unterverzeichnis allerdings eine Datei namens __init__.py besitzt, behandelt Python das Verzeichnis wie ein Paket (siehe oben) und Sie können entweder das Paket oder einzelne Module aus diesem Paket importieren.

Aktualisiert um 18:17 am 8. Februar 2021 von Jan Steiner