253 lines
7.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python Bootstrap-Template mit `.venv`- und `.env` Support
![Logo](./media/logo.png)
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-Template mit `.venv`- und `.env` Support](#python-bootstrap-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.