====== Snippets: Python ====== [[:snippets:start|← Zurück zu :snippets:start]] ===== Konfigurationsdateien lesen ===== ==== INI-Dateien ==== Python enthält mit [[https://docs.python.org/3/library/configparser.html|configparser]] bereits von Haus aus Unterstützung zum lesen von Konfigurationsdateien im INI-Format. Nachdem eine Instanz der Klasse ''configparser.ConfigParser'' erstellt wurde, muss nur noch mit ''load()'' die Konfigurationsdatei geladen werden. Danach kann die Parser-Instanz wie ein verschachteltes Dict benutzt werden. Im folgenden Beispiel werden so die Zugangsdaten zu einer MySQL-Datenbank aus gelesen und eine Verbindung aufgebaut. [APP] DEBUG = False [DATABASE] HOST = 127.0.0.1 USER = root PASSWORD = p@ssw0rd DB = my_database import configparser import MYSQLdb # Konfigurationsdatei lesen config = configparser.ConfigParser() config.read("config.ini") # Der Parser wird wie ein Dict in einem Dict ausgelesen: if config["APP"]["DEBUG"]: print("Debug mode enabled") db = MySQLdb.connect( config["DATABASE"]["HOST"], config["DATABASE"]["USER"], config["DATABASE"]["PASSWORD"], config["DATABASE"]["DB"] ) db.close() ===== Skript inkl. Abhängigkeiten als ausführbare ZIP-Datei ===== > **Achtung!** Dieses Snippet ist nur eine Roh-Fassung und muss noch überarbeitet werden! Mithilfe von Pythons [[https://docs.python.org/3/library/zipapp.html|zipapp-Modul]] lassen sich ausführbare ZIP-Archive erstellen, die ein Skript und alle seine Abhängigkeiten enthalten können. Die erzeugte Datei ist ein ZIP-Archiv mit Shebang, und kann so auf jedem System ausgeführt werden, solange Python installiert ist (Was unter Unix/Linux meist der Fall ist). Das folgende Skript erstellt eine zipapp für [[https://raw.githubusercontent.com/malte70/scripts/refs/heads/master/pushover-notify|pushover-notify]] (Teil meiner Skriptsammlung, sendet Benachrichtigungen über Pushover): # Python zipapp for pushover-notify cd "$(dirname $0)" wget "https://raw.githubusercontent.com/malte70/scripts/refs/heads/master/pushover-notify" echo '# requirements.txt # for standalone pushover-notify zipapp pushover @ git+https://github.com/Wyattjoh/pushover@5852545c5b9cf2717e1eafc4c8b134a08b0994da toml==0.10.2 ' > requirements_pushover_notify.txt # # Create pushover_notify package containing the script and # all of it's dependencies # mkdir pushover_notify/ # Empty __init__.py touch pushover_notify/__init__.py # The script itself cp pushover-notify pushover_notify/__main__.py # requirements.txt # (used later to install dependencies into the pushover_notify package) mv requirements_pushover_notify.txt pushover_notify/requirements.txt # Example config echo '[pushover] appname = "MyApp" api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" user_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Optional: Alternative apps [app.foo] appname = "Foo" api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ' > pushover_notify/pushover-notify.toml # Install external requirements python -m pip install -r pushover_notify/requirements.txt --target pushover_notify/ # Clean up after pip rm -rf pushover_notify/{__pycache__,bin,*.dist-info} # # Create a .pyz file from the module pushover_notify # python -m zipapp \ pushover_notify/ \ -p "/usr/bin/env python3" \ -o po-notify.pyz \ -c