Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
b3a831ed42 | |||
abeec7bd9c | |||
475f3cc1ee | |||
a57e7b8929 | |||
17353b3000 | |||
|
0b41b79db3 | ||
30f3cc0919 | |||
|
e70562cbdc | ||
411e2004e4 | |||
|
b7dfa5fc60 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -32,3 +32,10 @@ Thumbs.db
|
||||
|
||||
# .exe-Dateien überall ignorieren...
|
||||
*.exe
|
||||
|
||||
# Custom:
|
||||
*kopie*
|
||||
gitcopy.bat
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
|
87
CHANGELOG.md
87
CHANGELOG.md
@ -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
28
LICENSE
@ -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
178
README.md
@ -1,21 +1,50 @@
|
||||
# pyUpload (TKInter Version)
|
||||
# pyUpload (TKinter-Version)
|
||||
|
||||

|
||||
|
||||
## ⚠️ 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.
|
||||
|
23
app/main.py
23
app/main.py
@ -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 |
BIN
assets/logo-1.0-alpha_1024x1024.png
Normal file
BIN
assets/logo-1.0-alpha_1024x1024.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 798 KiB |
BIN
assets/logo-1.0-alpha_512x512.png
Normal file
BIN
assets/logo-1.0-alpha_512x512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 217 KiB |
13
start.cmd
13
start.cmd
@ -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
3
start.pyw
Normal file → Executable 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:])
|
||||
|
7
start.sh
7
start.sh
@ -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" "$@"
|
||||
|
Loading…
x
Reference in New Issue
Block a user