Eigenes Python installieren

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Motivation

Manchmal macht es Sinn eine eigene Python-Umgebung zu installieren. Gründe dafür können sein

  • Unabhängigkeit vom System-Python
  • Volle Kontrolle über eingesetzte Python-Packages
  • Freie Auswahl der Python-Distribution (z. B. die neueste)

Installation eines selbst kompilierten Pythons

Ich installiere ein eigenes Python (hier Python 3.11) so:

 mkdir /home/pacs/xyz00/opt
 mkdir /home/pacs/xyz00/build
 cd /home/pacs/xyz00/build
 wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
 tar xzf Python-3.11.3.tgz
 cd Python-3.11.3.tgz
 ./configure --enable-optimizations --prefix=/home/pacs/xyz00/opt
 make
 make install
 cd ..
 rm -rf build

Die folgenden Pfade sollten in der Datei .profile zum Ausführungspfad hinzugefügt werden:

 export PATH=$HOME/opt/bin:$HOME/.local/bin:$PATH

Dann sollten noch die Programme pip und pipenv für die neue Pythonversion installiert werden:

 # setze den neuen Pfad
 . ~/.profile
 python3 -m pip install --user --upgrade pip pipenv

Installation mit pyenv

Es gibt eine komfortable Möglichkeit, eigene Python Versionen zu installieren.

Das Werkzeug kommt aus der Ruby Welt, und ist ein Fork von rbenv.

Siehe auch https://github.com/pyenv/pyenv

Hinweis für lokale Installation

Falls ihr z.B. für Ansible lokal auf eurem eigenen Rechner eine neuere Version von Python installieren wollt, werden folgende Pakete benötigt:
apt-get -y install libssl-dev libbz2-dev libncurses-dev libffi-dev libreadline-dev libsqlite3-dev liblzma-dev zlib1g-dev

Diese Pakete sind bei Hostsharing bereits installiert.


Hier die Befehle, die ausgeführt werden müssen:

 git clone https://github.com/pyenv/pyenv.git ~/.pyenv
 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
 echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
 echo 'eval "$(pyenv init -)"' >> ~/.profile
 source ~/.profile
 pyenv versions
 pyenv version
 # siehe die aktuellen Versionen: https://www.python.org/downloads/
 pyenv install 3.10.11
 pyenv global 3.10
 python --version

Um pipenv speziell mit dieser Python-Version zu installieren:

 pip install pipenv
 pipenv install --python 3.10

Python Web Applikation mit Passenger

Die Integration der eigenen Python-Installation in den Apache erfolgt über das Apache-Modul "Passenger". Vor der Nutzung dieses Moduls bitte unbedingt die Hinweise zur Nutzung beachten.

Den Pfad zum Python-Binärprogramm konfiguriert man in den Eigenschaften der Domain in HSAdmin, unter PassengerPython: z.B. /home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3

(Versionsnummer, User und Paket im Pfad anpassen)

Für's Debugging ist die zusätzlich Option

 PassengerFriendlyErrorPages On

hilfreich.

Zum Testen kann man eine "passenger_wsgi.py" ins Verzeichnis /home/pacs/xyz00/users/example/doms/example.com/app-ssl/ ablegen.

Eine minimale "passenger_wsgi.py" zur Anzeige der Python Version:

#!/usr/bin/python3

import sys
import os

def application(environ, start_response):
    status = '200 OK'
    path = os.environ['PATH']
    python_executable_path = sys.executable

    output = f"Hello World!\nThis is Python {sys.version}\n" + \
       f"with PATH {path}\n and executable {python_executable_path}"

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]

    start_response(status, response_headers)

    return [bytes(output,'utf-8')]