255 lines
7.4 KiB
Markdown
Raw Normal View History

2025-04-24 13:52:37 +02:00
# Python Bootstrap-Flask-Template mit `.venv`- und `.env` Support
![Logo](./media/logo.png)
> ⚙️ Dieses Projekt verwendet [Git Subtree](SUBTREE.md) zur Integration des Basis-Templates. Details siehe [`SUBTREE.md`](SUBTREE.md).
Dieses Template nutzt PEP 8, Type Hints, Docstrings und einen vordefinierten Workspace für sauberen Python-Code.
Außerdem bietet es ein portables Start-Template für Python-Anwendungen mit folgenden Features:
- Automatische Erstellung einer virtuellen Umgebung (`.venv`)
- Automatische Installation von Abhängigkeiten aus `requirements.txt`
- Automatischer Neustart in der virtuellen Umgebung
- Unterstützung von Umgebungsvariablen über eine `.env`-Datei
- Sauberer Einstiegspunkt über `run.py`
- Keine systemweiten Python-Pakete notwendig
- Logging-Utils bereits integriert
Das Template ist durchdacht, pragmatisch und stark auf Entwicklerkomfort ausgelegt.
Es bietet eine sehr gute Grundlage für Projekte aller Art insbesondere CLI-Tools, kleine Services und lokale Anwendungen. Die automatische Einrichtung der virtuellen Umgebung hebt es funktional deutlich von Standard-Vorlagen ab.
**Was dieses template __nicht__ ist:**
- [ ] [pep-518](https://peps.python.org/pep-0518/)-konform 🚫
> ⚠️ Dieses Template verfolgt kein komplexes Build-System.
Es ist dafür gedacht, dir in Sekunden eine saubere, gekapselte Python-Umgebung bereitzustellen perfekt zum schnellen Testen, Debuggen oder Projektstart.
Einfach deinen Code in main.py werfen, bei Bedarf requirements.txt anpassen, run.py starten fertig. Kein Setup-Wahnsinn, kein Overhead.
---
## 🔜 Inhalt der Readme
- [Python Bootstrap-Flask-Template mit `.venv`- und `.env` Support](#python-bootstrap-flask-template-mit-venv--und-env-support)
- [🔜 Inhalt der Readme](#-inhalt-der-readme)
- [🔧 Projektstruktur](#-projektstruktur)
- [🚀 Erste Schritte](#-erste-schritte)
- [Beim ersten Start passiert:](#beim-ersten-start-passiert)
- [📦 Abhängigkeiten](#-abhängigkeiten)
- [⚙️ .env-Datei (optional)](#-env-datei-optional)
- [📜 Beispielausgabe](#-beispielausgabe)
- [🪵 Logging](#-logging)
- [🔧 Konfiguration (in `.env`)](#-konfiguration-in-env)
- [📥 Beispielausgabe](#-beispielausgabe-1)
- [📌 Logik im Code](#-logik-im-code)
- [📁 Logrotation](#-logrotation)
- [🛠 Hinweise](#-hinweise)
- [🧪 Getestet mit](#-getestet-mit)
- [🛠 Einsatz von `Linter` (`pylint`)](#-einsatz-von-linter-pylint)
- [📁 Lizenz](#-lizenz)
---
## 🔧 Projektstruktur
```plaintext
📁 template-root/
├── 📁 .vscode/ # Projekteinstellungen VS-Code
│ ├── 📄 settings.json # Einstellungen
│ └── 📄 extensions.json # Erweiterungen
├── 📄 .env # Projektkonfiguration (optional, nicht im git)
├── 📄 .env.example # Vorlage der .env
├── 📄 requirements.txt # Abhängigkeiten (z.B. python-dotenv)
├── 📄 README.md # diese Datei
├── 📄 CHANGELOG.md #
├── 📄 VERSION # Versionsinfo zum Paket
├── 📄 run.py # Einstiegspunkt für die Anwendung
├── 📁 media/
│ └── 📄 logo.png # Logo für GitHub
└── 📁 app/
├── 📄 __init__.py #
├── 📄 main.py # Hauptlogik der Anwendung
└── 📄 bootstrap.py # Setup- und Relaunch-Logik
```
> Release-Pakete als `.zip` sind bereits von unötigem Balast bereinigt. Die dargestellte Struktur entspricht einem `git clone`.
[🔝](#-inhalt-der-readme)
---
## 🚀 Erste Schritte
- [ ] `.env.example` in `.env` umbenennen und individuell befüllen.
- [ ] `.vscode`-Verzeichnis löschen, wenn du eigene Einstellungen nutzt. Ich habe es versehentlich committet und aus Bequemlichkeit drin gelassen, weil es meinem Standard entspicht.
- [ ] `requirements.txt` auf deine Bedürfnisse anpassen.
- [ ] `media/`Verzeichnis Löschen falls vorhanden.
**Erster Start des Templates:**
```bash
python run.py
```
### Beim ersten Start passiert:
1. `.venv` wird erstellt (wenn noch nicht vorhanden)
2. `requirements.txt` wird installiert
3. Das Skript wird automatisch innerhalb der venv neu gestartet
4. `.env` wird geladen (falls vorhanden)
5. **Die App startet 🚀**
> Es erfolgen einige Ausgaben, die alle aus der `main.py` stammen, außer du `DEBUG` in der `.env` aktiviert hast.
[🔝](#-inhalt-der-readme)
---
## 📦 Abhängigkeiten
Alle Abhängigkeiten werden aus `requirements.txt` installiert.
**Beispiel:**
```text
python-dotenv
```
[🔝](#-inhalt-der-readme)
---
## ⚙️ .env-Datei (optional)
Wenn vorhanden, wird `.env` automatisch geladen.
**Beispiel:**
```dotenv
APP_MODE=development
LOGLEVEL=debug
PORT=8080
```
Diese Werte sind im Code über `os.getenv("APP_MODE")` verfügbar.
[🔝](#-inhalt-der-readme)
---
## 📜 Beispielausgabe
```text
[BOOTSTRAP] Erstelle virtuelle Umgebung...
[BOOTSTRAP] Installiere pip + requirements.txt...
[BOOTSTRAP] Starte in virtueller Umgebung neu...
[RUN] Lade .env aus: ./cliqrcode/.env
[APP] Starte Anwendung im Modus: development
[APP] Hello, world!
```
[🔝](#-inhalt-der-readme)
---
## 🪵 Logging
Dieses Template verwendet ein integriertes Logging-Modul mit folgenden Eigenschaften:
- Ausgabe in die Konsole (immer aktiv)
- Optionale Ausgabe in eine Logdatei (`LOGFILE`)
- Unterstützung für rotierende Logdateien
- Loglevel konfigurierbar über `.env`
- Plattformunabhängig (Windows, Linux, macOS)
- Keine externen Abhängigkeiten
### 🔧 Konfiguration (in `.env`)
```dotenv
LOGLEVEL=INFO # Möglich: DEBUG, INFO, WARNING, ERROR, CRITICAL
LOGFILE=logs/app.log # Optionaler Pfad zur Logdatei (relativ oder absolut)
```
> Wenn `LOGFILE` nicht gesetzt ist, wird nur in die Konsole geloggt.
### 📥 Beispielausgabe
```bash
[2025-04-23 14:10:00] INFO app.main: Template ready.
[2025-04-23 14:10:00] DEBUG app.main: Dies ist eine Debug-Meldung.
```
### 📌 Logik im Code
In beliebigen Modulen kannst du so einen Logger verwenden:
```python
from app.logging_utils import get_logger
log = get_logger(__name__)
log.info("Template ready.")
```
### 📁 Logrotation
Die Logdatei wird bei 1MB automatisch rotiert (max. 3 Backups), z.B.:
```bash
logs/app.log
logs/app.log.1
logs/app.log.2
```
[🔝](#-inhalt-der-readme)
---
## 🛠 Hinweise
- Das Template ist portabel und benötigt keine global installierten Pakete.
- Du kannst es für jede neue App wiederverwenden.
- `run.py` ist der einzige Einstiegspunkt keine direkten Aufrufe von `main.py`.
[🔝](#-inhalt-der-readme)
---
## 🧪 Getestet mit
- Python 3.11, 3.12, 3.13
- Windows & Linux
- VS Code, Terminal, PowerShell
[🔝](#-inhalt-der-readme)
---
## 🛠 Einsatz von `Linter` (`pylint`)
```cmd
PS C:\Users\adams\Documents\template> .\.venv\Scripts\activate
```
```cmd
(.venv) PS C:\Users\adams\Documents\template> pylint.exe run.py
```
```cmd
************* Module run
run.py:27:4: C0412: Imports from package app are not grouped (ungrouped-imports)
run.py:12:0: W0611: Unused import os (unused-import)
-----------------------------------
Your code has been rated at 8.33/10
```
**Bonus:**
Durch den Einsatz der <.vscode/task.json> für VS-Code, kannst du in VS-Code mit `Strg + Umschalt + P``Tasks: Run Task``Linter (pylint)` oder `Typprüfung (mypy)` aufrufen.
[🔝](#-inhalt-der-readme)
---
## 📁 Lizenz
MIT frei verwendbar in eigenen Projekten.