Compare commits

...

10 Commits
v1.0.2 ... main

Author SHA1 Message Date
b3a831ed42
v1.2.2 2025-08-17 12:18:00 +02:00
abeec7bd9c merge testing 2025-05-08 15:48:13 +02:00
475f3cc1ee paypal-link in README.md hinzugefügt 2025-05-08 15:43:17 +02:00
a57e7b8929 Merge branch 'main' of ssh://dns.lan:2222/realAscot/pyUpload 2025-05-07 20:56:40 +02:00
17353b3000 v1.2.1
- Test auf Linux Workstation
  - Siehe CHANGELOG.md
2025-05-07 19:16:10 +02:00
Adam Skotarczak
0b41b79db3 v1.2.0 2025-04-28 12:02:27 +02:00
30f3cc0919
v1.1.1
Tippfehler in README.md
2025-04-25 09:51:47 +02:00
Adam Skotarczak
e70562cbdc 1.1.0 2025-04-25 08:56:35 +02:00
411e2004e4 backup commit 2025-04-23 16:32:02 +02:00
Adam Skotarczak
b7dfa5fc60 Feinschliff und README erweitert. start.cmd hat nun einen Fallback falls die .venv nicht vorhanden ist 2025-04-22 10:45:56 +02:00
12 changed files with 271 additions and 77 deletions

7
.gitignore vendored
View File

@ -32,3 +32,10 @@ Thumbs.db
# .exe-Dateien überall ignorieren...
*.exe
# Custom:
*kopie*
gitcopy.bat
# IDE
.vscode/

View File

@ -2,36 +2,71 @@
## pyUpload (TKInter-Version 1.0)
- **2025-04-22 - v.1.0.2**
- **2025-05-07 - v1.2.1**
- **Geändert:**
- [x] Logo angepasst und kleine belanglose Änderungen
- [X] (C) aus LICENSE entfernt
- Behoben
-- Wrapper-Skript `start.py` erkennt nun fehlende `.venv` und startet `main.py` beim Erststart korrekt mit System-Python, danach mit venv (`start.py`).
-- `main.py` verwendet unter Windows statt `os.execv()` nun `subprocess.Popen(..., CREATE_NEW_CONSOLE)` für einen sauberen Neustart mit sichtbarer Konsole (`main.py`).
---
- Entfernt
-- Nicht mehr benötigte Funktion `activate_venv()` entfernt (`main.py`).
- **2025-05-07 - v1.2.1**
- **Geändert:**
- [x] `main.py` übergibt beim Neustart unter Linux jetzt einen **absoluten Pfad**, um Doppelpunkte wie `app/app/main.py` zu vermeiden.
- [x] `start.pyw` berücksichtigt nun `venv`-Interpreter korrekt, wenn vorhanden, sonst fallback auf `sys.executable`.
- [x] Erkennung von fehlendem `ensurepip`, mit Hinweis zur Installation von `python3-venv` bei Bedarf.
- [x] Neue Warnung, wenn `tkinter` fehlt ohne Abbruch, Upload-Server läuft dennoch im CLI-Modus weiter.
- [x] README.md ergänzt um Setup-Hinweise für Linux bzgl. `python3-venv` und `python3-tk`.
- **2025-04-21 - v.1.0.1**
---
- Geändert
- `main.py` übernimmt nun automatisch die Erstellung der virtuellen Umgebung `.venv` und die Installation der Abhängigkeiten aus `requirements.txt`
- Entfernt: `install.cmd` und `startUpload.cmd` wurden vollständig ersetzt durch neue Startlogik
- `start.cmd` wurde vereinfacht, prüft nun auf vorhandenes `python` und startet `main.py` über absoluten Pfad
- `main.py` setzt bei Start automatisch `os.chdir()` auf das eigene Verzeichnis, um relative Pfade sicher zu behandeln
- **2025-04-28 - v1.2.0**
- **Geändert:**
- [x] `main.py` prüft nun zusätzlich, ob die virtuelle Umgebung auch funktioniert und nicht nur ob sie lediglich vorhanden ist.
- Hinzugefügt
- Neue plattformunabhängige `start.sh` für Linux/macOS
- Automatischer Restart nach Installation über `os.execv()` in `main.py`
- Neue Sicherheits- und Netzwerkinformationen in der `README.md`
- Erweiterung der `README.md` um Speicherort der Uploads und Projektstruktur
- Hinweis auf Projektstatus und neue Version unter <https://github.com/realAscot/pyUpload2>
- Neue LICENSE-Datei (proprietär, nicht zur Weitergabe)
- start.py hinzugefügt wenn auf manchen Systemen die Ausführung von .cmd und .bat gesperrt sind.
---
- Fixes
- PowerShell-Inkompatibilitäten mit `set /p` entfernt
- `.cmd`-Startskripte reagieren jetzt korrekt auf STRG+C
- Mehrere Markdown-Korrekturen (Codeblöcke, Leerzeilen, Lesbarkeit)
- **2025-04-25 - v1.1.0**
- **Geändert:**
- [x] Lizenz auf __MIT__ mit Namensnennung umgestellt, siehe [LICENSE](./LICENSE)
- [x] `main.py` prüft nun zusätzlich, ob bereits mit `pythonw.exe` gestartet wurde, um doppelten
Start mit neuem Fenster zu vermeiden
- [x] `main.py` ruft nach `subprocess.Popen(...)` nun zuverlässig `sys.exit(0)` auf, um „leere“ Ursprungsfenster zu beenden
- [x] `start.cmd` verwendet jetzt `python.exe` statt `pythonw.exe`, wodurch nur noch **ein** Konsolenfenster erscheint auch beim Setup
- [x] `start.sh` erkennt fehlendes `python3` und bricht mit Hinweis ab; Pfade werden sauber relativ berechnet
- **2025-04-21 - v.1.0.0**
- release!
- **Behoben:**
- [x] Mit diesen Änderungen behoben, dass unter Windows unnötige Consolenfenster gestartet werden und der Sprung nun sauber in die Virtuelle Umbebung `./app/.venv` erfolgt.
- **2025-04-22 - v1.0.2**
- **Behoben:**
- [x] Wrapper-Skript `start.py` erkennt nun fehlende `.venv` und startet `main.py` beim Erststart korrekt mit System-Python, danach mit venv (`start.py`).
- [x] `main.py` verwendet unter Windows statt `os.execv()` nun `subprocess.Popen(..., CREATE_NEW_CONSOLE)` für einen sauberen Neustart mit sichtbarer Konsole (`main.py`).
- **Entfernt:**
-- [x] Nicht mehr benötigte Funktion `activate_venv()` entfernt (`main.py`).
- **2025-04-21 - v1.0.1**
- **Geändert:**
- [x] `main.py` übernimmt nun automatisch die Erstellung der virtuellen Umgebung `.venv` und die Installation der Abhängigkeiten aus `requirements.txt`
- [x] Entfernt: `install.cmd` und `startUpload.cmd` wurden vollständig ersetzt durch neue Startlogik
- [x] `start.cmd` wurde vereinfacht, prüft nun auf vorhandenes `python` und startet `main.py` über absoluten Pfad
- [x] `main.py` setzt bei Start automatisch `os.chdir()` auf das eigene Verzeichnis, um relative Pfade sicher zu behandeln
- **Hinzugefügt:**
- [x] Neue plattformunabhängige `start.sh` für Linux/macOS
- [x] Automatischer Restart nach Installation über `os.execv()` in `main.py`
- [x] Neue Sicherheits- und Netzwerkinformationen in der `README.md`
- [x] Erweiterung der `README.md` um Speicherort der Uploads und Projektstruktur
- [x] Hinweis auf Projektstatus und neue Version unter <https://github.com/realAscot/pyUpload2>
- [x] Neue LICENSE-Datei (proprietär, nicht zur Weitergabe)
- [x] start.py hinzugefügt wenn auf manchen Systemen die Ausführung von .cmd und .bat gesperrt sind.
- **Fixes:**
- [x] PowerShell-Inkompatibilitäten mit `set /p` entfernt
- [x] `.cmd`-Startskripte reagieren jetzt korrekt auf STRG+C
- [x] Mehrere Markdown-Korrekturen (Codeblöcke, Leerzeilen, Lesbarkeit)
- **2025-04-21 - v1.0.0**
- [x] release!

28
LICENSE
View File

@ -1,17 +1,23 @@
# LICENSE
MIT License with Attribution Requirement
Copyright (c) 2025 Adam Skotarczak <adam@skotarczak.net>
Adam Skotarczak <adam@skotarczak.net>
Alle Rechte vorbehalten.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, subject to the following conditions:
Diese Software ist urheberrechtlich geschützt. Die Verwendung, Vervielfältigung, Verbreitung oder Änderung
dieser Software oder von Teilen davon ist ohne vorherige schriftliche Genehmigung des Autors ausdrücklich untersagt.
1. The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Die Software darf ausschließlich für private, interne oder zu Prüf- und Testzwecken verwendet werden.
Eine kommerzielle Nutzung oder Weitergabe an Dritte ist nicht gestattet.
2. **Attribution Requirement**: Any public use or distribution of this Software,
modified or unmodified, must include a clear and visible attribution to the original author:
Die Bereitstellung dieser Software erfolgt OHNE JEGLICHE GARANTIE,
weder ausdrücklich noch stillschweigend, einschließlich, aber nicht beschränkt auf die Garantien
der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
**Adam Skotarczak <adam@skotarczak.net>**
Durch die Nutzung dieser Software erklärst du dich mit den oben genannten Bedingungen einverstanden.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

178
README.md
View File

@ -1,21 +1,50 @@
# pyUpload (TKInter Version)
# pyUpload (TKinter-Version)
![pyUpload 1.0 Logo](./assets/logo-1.0-alpha.png)
## ⚠️ Projektstatus: Eingefroren Nur noch Bugfixes
Diese Version von **pyUpload** wird **nicht weiterentwickelt** und erhält nur noch Fehlerbehebungen.
Die neue Version mit Flask-Backend ist **BALD** verfügbar unter:
> Diese Version von **pyUpload** wird **nicht weiterentwickelt** und erhält nur noch Fehlerbehebungen.
> Die neue Version mit Flask-Backend wird **bald** verfügbar sein unter:
🔗 **<https://github.com/realAscot/pyUpload2>**
**DIESE** Version ist aber voll funktionsfähig, sowohl die reine Python-Version wie auch die Windows `.exe`
- (<https://github.com/realAscot/pyUpload/releases/tag/v1.0.0-alpha>)
Dem Programm liegen bootstrap Routinen bei die alle notwendigen Biblioteken nachinstallieren.
---
## pyUpload Sicherer Datei-Upload-Server über HTTPS (lokal & offline)
## 📑 Inhalt der Readme
- [pyUpload (TKinter-Version)](#pyupload-tkinter-version)
- [⚠️ Projektstatus: Eingefroren Nur noch Bugfixes](#-projektstatus-eingefroren--nur-noch-bugfixes)
- [📑 Inhalt der Readme](#-inhalt-der-readme)
- [pyUpload Sicherer Datei-Upload-Server über HTTPS (lokal \& offline)](#pyupload--sicherer-datei-upload-server-über-https-lokal--offline)
- [🛠 Features](#-features)
- [🚀 Schnellstart](#-schnellstart)
- [▶️ Für Windows](#-für-windows)
- [🐧 Für Linux / macOS](#-für-linux--macos)
- [🧩 Kommandozeilenoptionen](#-kommandozeilenoptionen)
- [🌐 Zugriff im Browser](#-zugriff-im-browser)
- [📁 Logs \& Uploads](#-logs--uploads)
- [🔐 Hinweis zur SSL-Zertifikatswarnung](#-hinweis-zur-ssl-zertifikatswarnung)
- [💡 Ideen für zukünftige Entwicklungen](#-ideen-für-zukünftige-entwicklungen)
- [🐛 Bekannte Bugs](#-bekannte-bugs)
- [🤖 Autor und Beteiligte](#-autor-und-beteiligte)
- [☕ Support](#-support)
- [📝 Lizenz](#-lizenz)
---
## pyUpload Sicherer Datei-Upload-Server über HTTPS (lokal & offline)
Diese Version basiert auf **Tkinter (GUI + QR)** sowie einer optionalen **reinen CLI-Nutzung**.
Sie ist vollständig lokal lauffähig ganz ohne Installation von externen Tools oder komplexen Abhängigkeiten.
[🔝](#-inhalt-der-readme)
---
## 🛠 Features
@ -28,11 +57,13 @@ Sie ist vollständig lokal lauffähig ganz ohne Installation von externen To
- **automatische Einrichtung von `.venv` und Abhängigkeiten**
- **kein Installationsskript mehr nötig alles passiert beim Start von `main.py`**
[🔝](#-inhalt-der-readme)
---
## 🚀 Schnellstart
## 🚀 Schnellstart
### ▶️ Für Windows:
### ▶️ Für Windows
1. Lade das Projekt herunter oder klone es:
@ -41,6 +72,9 @@ Sie ist vollständig lokal lauffähig ganz ohne Installation von externen To
git clone https://github.com/realAscot/pyUpload
```
Alternativ einfach eine bereinigte `.zip` bei den [Releases auf GitHub](https://github.com/realAscot/pyUpload/releases/) herrunterladen.
Diese enthält kein `.git`-Archiv und nur das Allernötigste für den Betrieb des Programms.
2. Starte die App mit:
```cmd
@ -55,12 +89,18 @@ Sie ist vollständig lokal lauffähig ganz ohne Installation von externen To
⚠️ **Alternative 2 falls die Ausführung per Doppelklick auf .bat oder .cmd gesperrt ist:**
> Doppelklick auf -> `start.pyw`
Doppelklick auf `start.pyw` oder im Terminal mit:
Es ist möglich das beim ersten mal gefragt wird womit das Programm gestartet werden soll.
```cmd
python start.pyw`
```
Es ist möglich, dass beim ersten Mal gefragt wird, womit das Programm gestartet werden soll.
Einfach die Python-Installation suchen und `python.exe` wählen.
### 🐧 Für Linux / macOS:
Ich empfehle, eine Verknüpfung der `start.pyw` z.B. auf dem Desktop zu erstellen
### 🐧 Für Linux / macOS
1. Stelle sicher, dass Python 3.8+ installiert ist:
@ -68,6 +108,20 @@ Sie ist vollständig lokal lauffähig ganz ohne Installation von externen To
python3 --version
```
Stelle sicher, dass die nötigen Systempakete vorhanden sind:
```bash
sudo apt install python3-venv python3-tk
```
Bei neueren Systemen mit z.B. Python 3.12:
```bash
sudo apt install python3.12-venv python3.12-tk
```
Dies trifft nicht bei allen Systemen zu, bei Ubuntu z.B muss TKinter händisch leider nachinstalliert werden.
2. Mache das Startscript ausführbar:
```bash
@ -88,15 +142,34 @@ Beim ersten Start wird automatisch:
- `requirements.txt` installiert
- das Programm danach neu aus der Umgebung gestartet
[🔝](#-inhalt-der-readme)
---
## 🧩 Kommandozeilenoptionen
```sh
python app\main.py --nogui # Start ohne GUI / QR
python app\main.py --port 9999 # Custom-Port verwenden
Du musst Dich im Verzeichnis `./app` befinden:
```cmd
python main.py -h oder --h # Hilfe
python main.py --nogui # Start ohne GUI / QR
python main.py --port 9999 # Custom-Port verwenden
```
oder für Verknüpfungen die `start.pyw` verwenden:
```cmd
pythonw.exe start.pyw -h oder --h # Hilfe
pythonw.exe start.pyw --nogui # Start ohne GUI / QR
pythonw.exe start.pyw --port 9999 # Custom-Port verwenden
```
Wenn Du die Dateierweiterung `.pyw` mit `pythonw.exe` verknüpfst, klappt es auch ohne mit Doppelklick im Explorer :-)
[🔝](#-inhalt-der-readme)
---
## 🌐 Zugriff im Browser
@ -104,41 +177,100 @@ python app\main.py --port 9999 # Custom-Port verwenden
Sobald gestartet:
```https
https://<lokale-IP>:4443
https://<lokale-IP>:4443 (oder Port, der mit der option `--port` gestartet wurde)
```
Alternativ QR-Code scannen (GUI-Modus).
Dateien werden im `upload/<Client-IP>/` gespeichert.
Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wird, falls man die Adresse händisch eingibt statt mit QR-Code! Man könnte noch zusätzlich einen http-server in der App laufen lassen, der dann automatisch umleitet, aber wir möchten das Programm so klein wie möglich halten.
[🔝](#-inhalt-der-readme)
---
## 📁 Logs & Uploads
- **Uploads**: im Ordner `upload/` nach Client-IP
- **Zentrale Logs**: `logs/pyupload.log`
- **Pro-Client Logs**: `logs/<Client-IP>.log`
- **Uploads**: im Ordner `upload/` nach Client-IP
- **Zentrale Logs**: `logs/pyupload.log`
- **Pro-Client Logs**: `logs/<Client-IP>.log`
[🔝](#-inhalt-der-readme)
---
## 🔐 Hinweis zur SSL-Zertifikatswarnung
Beim ersten Aufruf im Browser erscheint eine Warnung wegen des selbstsignierten Zertifikats.
Du kannst:
⚠️ Beim ersten Aufruf im Browser erscheint möglicherweise eine Warnung wegen eines selbstsignierten SSL-Zertifikats. Das ist normal.
- auf **„Erweitert“ > „Trotzdem fortfahren“** klicken
- eigene Zertifikate in `cert.pem` und `key.pem` hinterlegen
- Über **„Erweitert“ > „Trotzdem fortfahren“** den Zugriff manuell freigeben
- Eigene Zertifikate in den Dateien `cert.pem` und `key.pem` hinterlegen
Damit dein Browser diese Warnung dauerhaft vermeidet, müssen die Zertifikate zu deiner verwendeten Domain passen.
Da das in lokalen oder testnahen Umgebungen in der Regel nicht der Fall ist, lässt sich diese Warnung meist nicht vermeiden.
> **Wichtig zu wissen:**
Die Verbindung ist trotzdem Ende-zu-Ende verschlüsselt. Die Schlüssel werden bei jedem Start lokal neu generiert direkt auf deinem Rechner.
Technisch ist die Verbindung also sicher.
Dein Browser vertraut dem Zertifikat lediglich nicht, weil es nicht von einer offiziellen Zertifizierungsstelle stammt, sondern lokal erzeugt wurde.
TKinter unter Linux:
> **Hinweis für Linux-Benutzer:**
Falls die GUI nicht erscheint und stattdessen eine Warnung, wie `ModuleNotFoundError: No module named 'tkinter'`, liegt das daran,
dass `tkinter` unter Linux separat installiert werden muss.
Siehe Abschnitt [🐧 Für Linux / macOS](#-für-linux--macos) für Details.
[🔝](#-inhalt-der-readme)
---
## 👨‍💻 Autor
## 💡 Ideen für zukünftige Entwicklungen
Hier sind einige Vorschläge für zukünftige Erweiterungen.
Dies ist eine offene Liste von Ideen für zukünftige Features oder Verbesserungen.
Beiträge willkommen!
- [ ] Link zum Server auf der GUI zum Testen klickbar.
- [ ] _____________________________________________________
- [ ] _____________________________________________________
[🔝](#-inhalt-der-readme)
---
## 🐛 Bekannte Bugs
- **Frontend:** wenn im Browser der Button Hochladen gewählt wird, OHNE das Dateien ausgewählt wurden,
kommt es zu einem *Error response - Error code: 400* im Browser.
Lösungsansatz wäre den Button über JS zu sperren solange keine Datei ausgewählt ist. Lässt sich schnell im [template](./app/template.html) erledigen.
Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu.
Ich danke im Voraus!
[🔝](#-inhalt-der-readme)
---
## 🤖 Autor und Beteiligte
- **Adam Skotarczak**
Kontakt: [adam@skotarczak.net](mailto:adam@skotarczak.net)
GitHub: [realAscot](https://github.com/realAscot)
- **Du?**
[🔝](#-inhalt-der-readme)
---
## ☕ Support
Wenn dir dieses Projekt gefällt, kannst du mich hier unterstützen:
☕ [paypal.me/AdamSkotarczak](https://www.paypal.me/AdamSkotarczak)
---
## 📝 Lizenz
- Proprietär, © 2025 Adam Skotarczak
**Keine Weitergabe ohne ausdrückliche Genehmigung**
MIT [LICENSE](./LICENSE) frei verwendbar in eigenen Projekten bei Namensnennung.

View File

@ -1 +1 @@
1.0.2
1.2.2

View File

@ -1,10 +1,12 @@
#!/usr/bin/env python3
# © 2025 Adam Skotarczak (adam@skotarczak.net)
# Dieses Softwarepaket darf nicht ohne Genehmigung weiterverbreitet werden!
#
# Version 1.0.2 (22.04.2025 - virtuelle Umgebung korrekt aktiviert)
# Manuel in z.B VS-Code: .\app\.venv\Scripts\activate
# Version 1.2.1 (07.05.2025 - Linux Test und Anpassungen im Bootstap)
# Manuell in z.B. VS-Code: .\app\.venv\Scripts\activate
#
# Original unter:
# <https://github.com/realAscot/pyUpload/blob/main/app/main.py>
import os
import sys
@ -19,7 +21,7 @@ VENV_PYTHON = os.path.join(VENV_DIR, "Scripts", "python.exe") if os.name == "nt"
REQUIREMENTS_FILE = os.path.join(BASE_DIR, "requirements.txt")
# Wenn wir NICHT in der venv sind
if sys.prefix == sys.base_prefix:
if (sys.prefix == sys.base_prefix and sys.executable != VENV_PYTHON) or not os.path.exists(VENV_PYTHON):
# venv erstellen falls nötig
if not os.path.exists(VENV_DIR):
print("[Setup] Virtuelle Umgebung wird erstellt...")
@ -34,11 +36,12 @@ if sys.prefix == sys.base_prefix:
if os.name == "nt":
subprocess.Popen([VENV_PYTHON] + sys.argv, creationflags=subprocess.CREATE_NEW_CONSOLE)
else:
os.execv(VENV_PYTHON, [VENV_PYTHON] + sys.argv)
sys.exit(0)
else:
main_script = os.path.join(BASE_DIR, "main.py")
os.execv(VENV_PYTHON, [VENV_PYTHON, main_script] + sys.argv[1:])
#os.execv(VENV_PYTHON, [VENV_PYTHON] + sys.argv)
sys.exit(0)
# Wir sind jetzt sicher in der richtigen Umgebung → Rest des Programms geht hier weiter:
@ -258,7 +261,11 @@ def run_server_with_gui(port):
import qrcode
import webbrowser
from PIL import Image, ImageTk
import tkinter as tk
try:
import tkinter as tk
except ImportError:
print("⚠ Hinweis: tkinter ist nicht installiert. Für die GUI benötigst du:")
print(" sudo apt install python3-tk")
httpd = create_https_server(port)
server_ip = get_server_ip()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

View File

@ -11,9 +11,14 @@ if errorlevel 1 (
exit /b 1
)
:: Verzeichnis von start.cmd ermitteln (robust, egal von wo gestartet)
:: Verzeichnis von start.cmd ermitteln
set SCRIPT_DIR=%~dp0
:: Starte die Anwendung direkt aus app\
python "%SCRIPT_DIR%app\main.py" %*
:: Starte den Python-Wrapper, der .venv erkennt
if exist app\.venv\Scripts\python.exe (
python.exe "%SCRIPT_DIR%start.pyw" %*
) else (
echo Erste Initialisierung erforderlich.
echo Starte Setup-Konsole...
start cmd /k python.exe "%SCRIPT_DIR%start.pyw" %*
)

3
start.pyw Normal file → Executable file
View File

@ -13,4 +13,5 @@ venv_python = os.path.join("app", ".venv", "Scripts", "python.exe") if os.name =
python_exec = venv_python if os.path.exists(venv_python) else sys.executable
# Starte main.py
subprocess.run([python_exec, "app/main.py"] + sys.argv[1:])
main_script = os.path.abspath(os.path.join("app", "main.py"))
subprocess.run([python_exec, main_script] + sys.argv[1:])

View File

@ -1,6 +1,7 @@
#!/bin/bash
set -e
# Verzeichnis dieser Datei bestimmen
# Absoluten Pfad zur start.pyw berechnen (falls per Symlink gestartet)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Python-Interpreter prüfen
@ -10,5 +11,5 @@ if ! command -v python3 &> /dev/null; then
exit 1
fi
# Starte das Hauptskript
python3 "$SCRIPT_DIR/app/main.py" "$@"
# Direkt ausführen
python3 "$SCRIPT_DIR/start.pyw" "$@"