2. Python unter Unix Plattformen verwenden
******************************************


2.1. Die neueste Python-Version beziehen und installieren
=========================================================


2.1.1. Unter Linux
------------------

Python ist auf den meisten Linux-Distributionen vorinstalliert und auf
allen übrigen als Paket verfügbar. Es gibt allerdings bestimmte
Funktionen, die du vielleicht nutzen möchtest und die im Paket deiner
Distribution nicht enthalten sind. Du kannst die neueste Python-
Version aus dem Quellcode kompilieren.

Falls die neueste Python-Version nicht vorinstalliert ist und auch
nicht in den Paketquellen liegt, kannst du Pakete für deine eigene
Distribution bauen. Sieh dir dazu die folgenden Verweise an:

Siehe auch:

  https://www.debian.org/doc/manuals/maint-guide/first.en.html
     für Debian-Benutzer

  https://en.opensuse.org/Portal:Packaging
     für OpenSuse-Benutzer

  https://docs.fedoraproject.org/en-US/package-
  maintainers/Packaging_Tutorial_GNU_Hello/
     für Fedora-Benutzer

  https://slackbook.org/html/package-management-making-packages.html
     für Slackware-Benutzer


2.1.1.1. IDLE installieren
~~~~~~~~~~~~~~~~~~~~~~~~~~

In einigen Fällen ist IDLE nicht in deiner Python-Installation
enthalten.

* Für Debian- und Ubuntu-Benutzer:

     sudo apt update
     sudo apt install idle

* Für Fedora-, RHEL- und CentOS-Benutzer:

     sudo dnf install python3-idle

* Für SUSE- und OpenSUSE-Benutzer:

     sudo zypper install python3-idle

* Für Benutzer von Alpine Linux:

     sudo apk add python3-idle


2.1.2. Unter FreeBSD und OpenBSD
--------------------------------

* FreeBSD-Benutzer fügen das Paket so hinzu:

     pkg install python3

* OpenBSD-Benutzer fügen das Paket so hinzu:

     pkg_add -r python

     pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz

  Benutzer von i386 bekommen die Version 2.5.1 von Python zum Beispiel
  so:

     pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz


2.2. Python bauen
=================

Siehe auch:

  Wenn du zu CPython beitragen möchtest, sieh in den devguide, der
  Bauanleitungen und weitere Hinweise zum Einrichten der Umgebung
  enthält.

Wenn du CPython selbst kompilieren möchtest, besorge dir als Erstes
den Quellcode. Du kannst entweder den Quellcode der neuesten
Veröffentlichung herunterladen oder einen frischen Klon holen.
Außerdem musst du die Voraussetzungen für den Build installieren.

Der Bauvorgang besteht aus den gewohnten Befehlen:

   ./configure
   make
   make install

Konfigurationsoptionen und Besonderheiten einzelner Unix-Plattformen
sind ausführlich in der Datei README.rst in der Wurzel des Python-
Quellbaums beschrieben.

Warnung:

  "make install" kann die Binärdatei "python3" überschreiben oder
  verdecken. Statt "make install" empfiehlt sich daher "make
  altinstall", denn es installiert nur
  "*exec_prefix*/bin/python*version*".


2.3. Pfade und Dateien im Zusammenhang mit Python
=================================================

Diese können sich je nach den örtlichen Installationsgewohnheiten
unterscheiden. "prefix" und "exec_prefix" hängen von der Installation
ab und sind so zu verstehen wie bei GNU-Software. Sie können auch
gleich sein.

Auf den meisten Linux-Systemen ist die Vorgabe für beide zum Beispiel
"/usr".

+-------------------------------------------------+--------------------------------------------+
| Datei/Verzeichnis                               | Bedeutung                                  |
|=================================================|============================================|
| "*exec_prefix*/bin/python3"                     | Empfohlener Ort des Interpreters.          |
+-------------------------------------------------+--------------------------------------------+
| "*prefix*/lib/python*version*",                 | Empfohlene Orte der Verzeichnisse mit den  |
| "*exec_prefix*/lib/python*version*"             | Standardmodulen.                           |
+-------------------------------------------------+--------------------------------------------+
| "*prefix*/include/python*version*",             | Empfohlene Orte der Verzeichnisse mit den  |
| "*exec_prefix*/include/python*version*"         | Headerdateien, die zum Entwickeln von      |
|                                                 | Python-Erweiterungen und zum Einbetten des |
|                                                 | Interpreters nötig sind.                   |
+-------------------------------------------------+--------------------------------------------+


2.4. Verschiedenes
==================

Damit sich Python-Skripte unter Unix bequem verwenden lassen, musst du
sie ausführbar machen, etwa mit

   $ chmod +x script

und oben im Skript eine passende Shebang-Zeile einfügen. Eine gute
Wahl ist meist

   #!/usr/bin/env python3

was den Python-Interpreter im ganzen "PATH" sucht. Manche Unix-
Varianten haben allerdings keinen Befehl **env**, dann musst du
"/usr/bin/python3" als Interpreterpfad fest eintragen.

Um Shell-Befehle in deinen Python-Skripten zu verwenden, sieh dir das
Modul "subprocess" an.


2.5. Eigenes OpenSSL
====================

1. Um die OpenSSL-Konfiguration deines Anbieters und den
   Vertrauensspeicher des Systems zu verwenden, finde das Verzeichnis
   mit der Datei "openssl.cnf" oder der symbolischen Verknüpfung
   darauf in "/etc". Auf den meisten Distributionen liegt die Datei
   entweder in "/etc/ssl" oder in "/etc/pki/tls". Das Verzeichnis
   sollte außerdem eine Datei "cert.pem" und/oder ein Verzeichnis
   "certs" enthalten.

      $ find /etc/ -name openssl.cnf -printf "%h\n"
      /etc/ssl

2. Lade OpenSSL herunter, baue und installiere es. Achte darauf,
   "install_sw" zu verwenden und nicht "install". Das Ziel
   "install_sw" überschreibt "openssl.cnf" nicht.

      $ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz
      $ tar xzf openssl-VERSION
      $ pushd openssl-VERSION
      $ ./config \
          --prefix=/usr/local/custom-openssl \
          --libdir=lib \
          --openssldir=/etc/ssl
      $ make -j1 depend
      $ make -j8
      $ make install_sw
      $ popd

3. Baue Python mit dem eigenen OpenSSL (siehe die configure-Optionen "
   --with-openssl" und "--with-openssl-rpath")

      $ pushd python-3.x.x
      $ ./configure -C \
          --with-openssl=/usr/local/custom-openssl \
          --with-openssl-rpath=auto \
          --prefix=/usr/local/python-3.x.x
      $ make -j8
      $ make altinstall

Bemerkung:

  Patch-Veröffentlichungen von OpenSSL haben ein abwärtsverträgliches
  ABI. Du musst Python nicht neu kompilieren, um OpenSSL zu
  aktualisieren. Es genügt, die eigene OpenSSL-Installation durch eine
  neuere Fassung zu ersetzen.
