User Tools

Site Tools


snippets:python:start

Snippets: Python

Konfigurationsdateien lesen

INI-Dateien

Python enthält mit 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.

  1. [APP]
  2. DEBUG = False
  3.  
  4. [DATABASE]
  5. HOST = 127.0.0.1
  6. USER = root
  7. PASSWORD = p@ssw0rd
  8. DB = my_database
  1. import configparser
  2. import MYSQLdb
  3.  
  4. # Konfigurationsdatei lesen
  5. config = configparser.ConfigParser()
  6. config.read("config.ini")
  7.  
  8. # Der Parser wird wie ein Dict in einem Dict ausgelesen:
  9. if config["APP"]["DEBUG"]:
  10. print("Debug mode enabled")
  11.  
  12. db = MySQLdb.connect(
  13. config["DATABASE"]["HOST"],
  14. config["DATABASE"]["USER"],
  15. config["DATABASE"]["PASSWORD"],
  16. config["DATABASE"]["DB"]
  17. )
  18. 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 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 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
snippets/python/start.txt · Last modified: by malte70