Möglichkeiten um Projekte "einfach" auf verschiedenen Server einzurichten

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

danke für die Hilfe, jetzt funktioniert es. Also weil ich provisorisch meine 3 Python-Dateien in das Arbeitsverzeichnis anstatt in `src` kopiert habe. Dadurch hat sich auch der String zu "app:app" geändert. (aber das wird sich vermutlich noch mal ändern, falls jemand nachfolgendes mit mir durch kauen will)

Das ist schön, dass du die Struktur ansprichst. Weil das ist auch wieder so ein Punkt bei mir, bei dem ich nicht richtig weis, wo was eigentlich hingehört. Und wenn man im Netz sucht findet man viele Aussagen die starten mit "Ich mache es immer so..." Und daraus ist meine Struktur entstanden.

Code: Alles auswählen

.
├── app
│   ├── src
│   │   ├── app.py
│   │   ├── gas.py
│   │   ├── __init__.py
│   └── templates
│       ├── header.png
│       └── Test.html
├── docker-compose.yaml
├── Dockerfile
├── LICENSE
├── testdatabase.sql
├── README.md
├── requirements.txt
└── technical_data
    ├── machine.json
    └── fill_database.py
Die Gedanken dahinter: Ich habe eine Anwendung, die braucht im Betrieb Quellcode, daher der Unterordner `src` und sie braucht für die Darstellung etwas für den Browser, daher der Unterordner `templates`.
Der Rest wird für die einmalige Einrichtung benötigt bzw. sind allgemeine Informationen, die vor der Inbetriebnahme benötigt werden, deshalb auf oberster Ebene.
Vielleicht habe ich auch Begriff-Schwierigkeiten, für mich (nach meinem Verständnis) ist `gas.py` ein Modul. Wieso sagst du `src` wäre ein Modul? Also ich weiß schon das ich so was wie `from src import gas` schreiben könnte und dann hätte ich aus dem Modul `src` etwas importiert. Nur um die Begriffe zu verstehen bzw. woran machst du fest, dass `src` ein Modul ist.
Und was ich auch nicht verstehe, in `src` liegt bei mir der Quellcode, wie zu erwarten oder wieso nicht? Auch hier wieder, wenn das jetzt ein Projekt in einer Sprache wäre, in der ich den Code erst kompilieren müsste, dann liegt zum Beispiel in `src` meine `main.rs` und daraus baue ich die ausführbare Datei.
Nur wie übertrage ich das auf Python bzw. wo gehören welche Dateien hin (und im besten Fall, wieso)?

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

src ist ein Paket, weil eine __init__.py in diesem Verzeichnis liegt. Zum einen ist es gut, dass Dein Projekt nur aus einem Paket besteht, zum anderen ist der Name sehr schlecht. Es sollte eher so aussehen: src/tolles_projekt/*.py
Dann sollte das Python-Paket installiert werden und nicht einzelne Dateien kopiert werden. Zum Installieren benutzt man

Code: Alles auswählen

$ python -m pip install
Und das sollte auch die einzige RUN-Zeile im DOCKERFILE sein. Wenn Dein Projekt nicht sauber in irgendeiner Umgebung installiert werden kann ist Docker auch nicht die Lösung.
Dazu brauchst Du eine pyproject.toml Datei. Damit kannst Du auch Deine Templates in einer sauberen strukturierten Form einbinden.
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@Dennis89: Ist richtig. Das ist natürlich ein Paket und kein Modul. Es war spät.

Diese Verwirrung rund um "wo lasse ich Dinge in einem Web-Projekt" ist der Grund, warum ich Menschen empfehle, mit Django zu starten. Klar, ist das erst einmal ein größerer Batzen - aber es hat unglaublich gute Tutorials und bringt automatisch eine sinnvolle Struktur mit, die man dann auf andere Umgebungen übertragen kann.

Ich gehe mit Sirius3 nicht ganz mit. Für mich ist es ok, den Container auf diese Weise zu bauen.
Bis zur Kompliziertheit mittelgroßer Projekte mache ich das auch so wie du (mehr oder weniger). Zwei Dockerfiles, eines für die lokale Entwicklungsumgebung, eines, das für die Produktivumgebung baut. Und sie unterscheiden sich nur darin, dass bei dem einen die lokalen Dateien in den Container gemounted werden (für die lokale Entwicklung) und bei dem anderen die Dateien in das Image kopiert werden.
Für mich überwiegen die Vorteile, dass sich so die Entwicklungs- und die Produktivumgebung nahezu identisch sind.
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen und danke für eure Antworten.

@Sirius3 Okay wenn ich das so machen würde, dann würde ich hier bei "creating executable scripts" meine "app.py" reinschreiben, damit ich es starten kann?

@sparrow Ich hatte mal ganz kurz "in" Django" reingeschaut, als es mal darum ging, das mein vorheriges Projekt eventuell Benutzer mit Zugriffsrechten bekommen soll. Da das dann doch nicht notwendig war, bin ich bei `Flask` geblieben.
Da ja meine "Lieblingszeit" bevorsteht, kann ich die wenigstens nutzen und mich mal durch die Tutorials arbeiten.


Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten