Default Version

Python 3.6.8 ist auf dem Cluster als Standardversion installiert. Um sie zu verwenden, brauchen Sie kein Modul laden. Speziell für diese Python-Version sind einige Pakete wie numpy, scipy und mpi4py verfügbar, wenn die entsprechenden Module wie unten aufgeführt geladen werden:

Python Module Environment Module
numpy py3-numpy
scipy py3-scipy
mpi4py py3-mpi4py

Aktuellere Version

Version 3.11.2 von Python kann durch Laden des Moduls python verwendet werden. Hinweis: Dieses Modul python hat vorinstallierte kompatible Pakete wie numpy, scipy und mpi4py, so dass Sie die Module dieser Pakete nicht separat laden müssen, im Gegensatz zur Default-Version. Verwenden Sie diesen Befehl, um vorinstallierte Pakete aufzulisten.

Sie können das Modul python mit dem folgenden Befehl laden:

$ module load python
Loading Python 3.11.2 Environment

Sie können die Python-Version mit dem folgenden Befehl überprüfen:

$ python --version
Python 3.11.2

Sie können das Installationsverzeichnis auch mit dem folgenden Befehl überprüfen:

$ which python
/cm/shared/omni/apps/python/3.11.2/bin/python

Achtung: Aus Kompatibilitätsgründen ist von Seiten des Betriebssystems noch Python 2.7.18 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.

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 pip3 selbst installieren. Dazu geben Sie in der Konsole

$ pip3 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 Gerd Pokorra