Browse Source

📝 Add new (AI) translations to German

pull/13929/head
Sebastián Ramírez 7 days ago
parent
commit
c73e4d476d
  1. 75
      docs/de/docs/fastapi-cli.md
  2. 88
      docs/de/docs/tutorial/cors.md
  3. 78
      docs/de/docs/tutorial/request-form-models.md
  4. 842
      docs/de/docs/virtual-environments.md

75
docs/de/docs/fastapi-cli.md

@ -0,0 +1,75 @@
# FastAPI CLI
**FastAPI CLI** ist ein Befehlszeilenprogramm, mit dem Sie Ihre FastAPI-Anwendung bedienen, Ihr FastAPI-Projekt verwalten und mehr tun können.
Wenn Sie FastAPI installieren (z. B. mit `pip install "fastapi[standard]"`), wird ein Package namens `fastapi-cli` eingeschlossen, dieses Package stellt den `fastapi`-Befehl im Terminal bereit.
Um Ihre FastAPI-Anwendung zur Entwicklung auszuführen, können Sie den Befehl `fastapi dev` verwenden:
<div class="termy">
```console
$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Entwicklungsserver wird gestartet 🚀
Suche nach Package-Dateistruktur in Verzeichnissen mit
<font color="#3465A4">__init__.py</font> Dateien
Import aus <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
<span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Das FastAPI-Anwendungsobjekt wird aus dem Modul mit dem
folgenden Code importiert:
<u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
<span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Verwenden des Import Strings: <font color="#3465A4">main:app</font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server gestartet unter <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Dokumentation unter <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Läuft im Entwicklungsmodus, für die Produktion verwenden Sie:
<b>fastapi run</b>
Logs:
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Es wird auf Änderungen in diesen Verzeichnissen geachtet:
<b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn läuft auf <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Drücken Sie STRG+C zum
Beenden<b>)</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Reloader-Prozess wurde gestartet <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> unter Verwendung von WatchFiles
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Server-Prozess gestartet <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Warten auf den Start der Anwendung.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Anwendungsstart vollständig.
```
</div>
Das Befehlszeilenprogramm namens `fastapi` ist **FastAPI CLI**.
FastAPI CLI nimmt den Pfad zu Ihrem Python-Programm (z. B. `main.py`) entgegen und erkennt automatisch die `FastAPI`-Instanz (gewöhnlich `app` genannt), bestimmt den korrekten Importprozess und bedient sie dann.
Für die Produktion würden Sie stattdessen `fastapi run` verwenden. 🚀
Intern verwendet **FastAPI CLI** <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a>, einen leistungsfähigen, produktionsbereiten, ASGI-Server. 😎
## `fastapi dev`
Das Ausführen von `fastapi dev` startet den Entwicklungsmodus.
Standardmäßig ist **auto-reload** aktiviert, was den Server automatisch neu lädt, wenn Sie Änderungen an Ihrem Code vornehmen. Dies ist ressourcenintensiv und könnte weniger stabil sein als wenn es deaktiviert ist. Sie sollten es nur zur Entwicklung verwenden. Es hört auch auf die IP-Adresse `127.0.0.1`, welche die IP für Ihren Rechner ist, um nur mit sich selbst zu kommunizieren (`localhost`).
## `fastapi run`
Das Ausführen von `fastapi run` startet FastAPI standardmäßig im Produktionsmodus.
Standardmäßig ist **auto-reload** deaktiviert. Es hört auch auf die IP-Adresse `0.0.0.0`, was alle verfügbaren IP-Adressen bedeutet, so dass es für jeden zugänglich ist, der mit dem Rechner kommunizieren kann. So würden Sie es normalerweise in der Herstellung betreiben, zum Beispiel in einem Container.
In den meisten Fällen hätten (und sollten) Sie einen „Termination Proxy“, der HTTPS für Sie oben handhabt; dies hängt davon ab, wie Sie Ihre Anwendung bereitstellen, Ihr Anbieter könnte dies für Sie tun, oder Sie müssen es selbst einrichten.
/// tip | Tipp
Sie können mehr darüber in der [Deployment-Dokumentation](deployment/index.md){.internal-link target=_blank} erfahren.
///

88
docs/de/docs/tutorial/cors.md

@ -0,0 +1,88 @@
# CORS (Cross-Origin Resource Sharing)
<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">CORS oder „Cross-Origin Resource Sharing“</a> bezieht sich auf die Situationen, in denen ein Frontend, das in einem Browser läuft, JavaScript-Code enthält, der mit einem Backend kommuniziert, und das Backend sich in einem anderen „Ursprung“ als das Frontend befindet.
## Ursprung
Ein Ursprung ist die Kombination aus Protokoll (`http`, `https`), Domain (`myapp.com`, `localhost`, `localhost.tiangolo.com`) und Port (`80`, `443`, `8080`).
Also sind all diese unterschiedliche Ursprünge:
* `http://localhost`
* `https://localhost`
* `http://localhost:8080`
Auch wenn sie alle auf `localhost` sind, verwenden sie unterschiedliche Protokolle oder Ports, also sind sie verschiedene „Ursprünge“.
## Schritte
Nehmen wir also an, Sie haben ein Frontend, das in Ihrem Browser unter `http://localhost:8080` läuft, und dessen JavaScript versucht, mit einem Backend zu kommunizieren, das unter `http://localhost` läuft (da wir keinen Port angeben, nimmt der Browser den Defaultport `80` an).
Dann wird der Browser einen HTTP `OPTIONS`-Request an das `:80`-Backend senden, und wenn das Backend die entsprechenden Header sendet, die die Kommunikation von diesem anderen Ursprung (`http://localhost:8080`) autorisieren, dann lässt der `:8080`-Browser das JavaScript im Frontend seine Anfrage an das `:80`-Backend senden.
Um dies zu erreichen, muss das `:80`-Backend eine Liste von „erlaubten Ursprüngen“ haben.
In diesem Fall müsste die Liste `http://localhost:8080` enthalten, damit das `:8080`-Frontend korrekt funktioniert.
## Wildcards
Es ist auch möglich, die Liste als `"*"` (ein „Wildcard“) anzugeben, um zu sagen, dass alle erlaubt sind.
Aber das wird nur bestimmte Arten der Kommunikation erlauben, alles ausschließend, was Anmeldeinformationen umfasst: Cookies, Authorization-Header wie diejenigen, die mit Bearer-Tokens verwendet werden, usw.
Daher ist es besser, die erlaubten Ursprünge explizit anzugeben, damit alles korrekt funktioniert.
## Verwenden Sie `CORSMiddleware`
Sie können es in Ihrer **FastAPI**-Anwendung mit der `CORSMiddleware` konfigurieren.
* Importieren Sie `CORSMiddleware`.
* Erstellen Sie eine Liste der erlaubten Ursprünge (als Strings).
* Fügen Sie es Ihrer **FastAPI**-Anwendung als „Middleware“ hinzu.
Sie können auch angeben, ob Ihr Backend Folgendes zulässt:
* Anmeldeinformationen (Authorization-Header, Cookies, usw.).
* Bestimmte HTTP-Methoden (`POST`, `PUT`) oder alle mit dem Wildcard `"*"`.
* Bestimmte HTTP-Header oder alle mit dem Wildcard `"*"`.
{* ../../docs_src/cors/tutorial001.py hl[2,6:11,13:19] *}
Die von der `CORSMiddleware`-Implementierung verwendeten Defaultparameter sind standardmäßig restriktiv, daher müssen Sie bestimmte Ursprünge, Methoden oder Header explizit aktivieren, damit Browser sie in einem Cross-Domain-Kontext verwenden können.
Die folgenden Argumente werden unterstützt:
* `allow_origins` - Eine Liste von Ursprüngen, die Cross-Origin-Requests durchführen dürfen. Z.B. `['https://example.org', 'https://www.example.org']`. Sie können `['*']` verwenden, um jeden Ursprung zuzulassen.
* `allow_origin_regex` - Ein Regex-String, der mit Ursprüngen übereinstimmen muss, die Cross-Origin-Requests durchführen dürfen. z.B. `'https://.*\.example\.org'`.
* `allow_methods` - Eine Liste von HTTP-Methoden, die für Cross-Origin-Requests erlaubt sein sollten. Standardmäßig `['GET']`. Sie können `['*']` verwenden, um alle Standardmethoden zuzulassen.
* `allow_headers` - Eine Liste von HTTP-Anfrage-Headern, die für Cross-Origin-Requests unterstützt werden sollten. Standardmäßig `[]`. Sie können `['*']` verwenden, um alle Header zuzulassen. Die Header `Accept`, `Accept-Language`, `Content-Language` und `Content-Type` sind immer für <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests" class="external-link" rel="noopener" target="_blank">einfache CORS-Anfragen</a> erlaubt.
* `allow_credentials` - Zeigt an, dass Cookies für Cross-Origin-Requests unterstützt werden sollten. Standardmäßig `False`.
Keiner der `allow_origins`, `allow_methods` und `allow_headers` kann auf `['*']` gesetzt werden, wenn `allow_credentials` auf `True` gesetzt ist. Alle müssen <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards" class="external-link" rel="noopener" target="_blank">explizit angegeben</a> werden.
* `expose_headers` - Gibt an, welche Response-Header dem Browser zugänglich gemacht werden sollen. Standardmäßig `[]`.
* `max_age` - Legt eine maximale Zeit in Sekunden fest, wie lange Browser CORS-Responses cachen dürfen. Standardmäßig `600`.
Die Middleware antwortet auf zwei besondere Arten von HTTP-Requests...
### CORS Preflight-Anfragen
Dies sind alle `OPTIONS`-Requests mit `Origin`- und `Access-Control-Request-Method`-Headern.
In diesem Fall wird die Middleware den eingehenden Request abfangen und mit den entsprechenden CORS-Headern antworten und entweder eine `200`- oder `400`-Response zu Informationszwecken senden.
### Einfache Anfragen
Jede Anfrage mit einem `Origin`-Header. In diesem Fall wird die Middleware den Request normal durchlassen, aber die entsprechenden CORS-Header zur Response hinzufügen.
## Weitere Informationen
Für weitere Informationen über <abbr title="Cross-Origin Resource Sharing">CORS</abbr> lesen Sie die <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">Mozilla CORS Dokumentation</a>.
/// note | Technische Details
Sie könnten auch `from starlette.middleware.cors import CORSMiddleware` verwenden.
**FastAPI** bietet mehrere Middlewares in `fastapi.middleware` an, lediglich als Bequemlichkeit für Sie, den Entwickler. Aber die meisten der verfügbaren Middlewares stammen direkt von Starlette.
///

78
docs/de/docs/tutorial/request-form-models.md

@ -0,0 +1,78 @@
# Formularmodelle
Sie können **Pydantic-Modelle** verwenden, um **Formularfelder** in FastAPI zu deklarieren.
/// info | Hinweis
Um Formulare zu verwenden, installieren Sie zuerst <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>.
Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md){.internal-link target=_blank} erstellen, diese aktivieren und dann das Paket installieren, zum Beispiel:
```console
$ pip install python-multipart
```
///
/// note | Hinweis
Dies wird seit FastAPI Version `0.113.0` unterstützt. 🤓
///
## Pydantic-Modelle für Formulare
Sie müssen lediglich ein **Pydantic-Modell** mit den Feldern deklarieren, die Sie als **Formularfelder** empfangen möchten, und dann den Parameter als `Form` deklarieren:
{* ../../docs_src/request_form_models/tutorial001_an_py39.py hl[9:11,15] *}
**FastAPI** wird die Daten für **jedes Feld** aus den **Formulardaten** in der Anfrage **extrahieren** und Ihnen das von Ihnen definierte Pydantic-Modell zurückgeben.
## Überprüfen Sie die Dokumentation
Sie können dies in der Dokumentationsoberfläche unter `/docs` überprüfen:
<div class="screenshot">
<img src="/img/tutorial/request-form-models/image01.png">
</div>
## Zusätzliche Formularfelder verbieten
In einigen besonderen Anwendungsfällen (wahrscheinlich nicht sehr häufig) möchten Sie möglicherweise die Formularfelder auf nur die im Pydantic-Modell deklarierten Felder **beschränken**. Und jegliche **zusätzlichen** Felder **verbieten**.
/// note | Hinweis
Dies wird seit FastAPI Version `0.114.0` unterstützt. 🤓
///
Sie können die Modellkonfiguration von Pydantic verwenden, um `extra` Felder zu `verbieten`:
{* ../../docs_src/request_form_models/tutorial002_an_py39.py hl[12] *}
Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine **Error-Response**.
Zum Beispiel, wenn der Client versucht, die folgenden Formularfelder zu senden:
* `username`: `Rick`
* `password`: `Portal Gun`
* `extra`: `Mr. Poopybutthole`
Er wird eine Fehlerantwort erhalten, die ihm mitteilt, dass das Feld `extra` nicht erlaubt ist:
```json
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "extra"],
"msg": "Extra inputs are not permitted",
"input": "Mr. Poopybutthole"
}
]
}
```
## Zusammenfassung
Sie können Pydantic-Modelle verwenden, um Formularfelder in FastAPI zu deklarieren. 😎

842
docs/de/docs/virtual-environments.md

@ -0,0 +1,842 @@
# Virtuelle Umgebungen
Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die Pakete, die Sie für jedes Projekt installieren, zu isolieren.
/// info | Hinweis
Wenn Sie bereits über virtuelle Umgebungen Bescheid wissen, wie man sie erstellt und verwendet, möchten Sie diesen Abschnitt vielleicht überspringen. 🤓
///
/// tip | Tipp
Eine **virtuelle Umgebung** unterscheidet sich von einer **Umgebungsvariable**.
Eine **Umgebungsvariable** ist eine Variable im System, die von Programmen verwendet werden kann.
Eine **virtuelle Umgebung** ist ein Verzeichnis mit einigen Dateien darin.
///
/// info | Hinweis
Diese Seite wird Ihnen beibringen, wie Sie **virtuelle Umgebungen** verwenden und wie sie funktionieren.
Wenn Sie bereit sind, ein **Tool zu verwenden, das alles für Sie verwaltet** (einschließlich der Installation von Python), probieren Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>.
///
## Ein Projekt erstellen
Zuerst erstellen Sie ein Verzeichnis für Ihr Projekt.
Was ich normalerweise mache, ist, dass ich ein Verzeichnis namens `code` in meinem Home/Benutzerverzeichnis erstelle.
Und darin erstelle ich ein Verzeichnis pro Projekt.
<div class="termy">
```console
// Gehen Sie zum Home-Verzeichnis
$ cd
// Erstellen Sie ein Verzeichnis für all Ihre Code-Projekte
$ mkdir code
// Betreten Sie dieses Code-Verzeichnis
$ cd code
// Erstellen Sie ein Verzeichnis für dieses Projekt
$ mkdir awesome-project
// Betreten Sie dieses Projektverzeichnis
$ cd awesome-project
```
</div>
## Eine virtuelle Umgebung erstellen
Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **<abbr title="es gibt andere Optionen, dies ist eine einfache Richtlinie">innerhalb Ihres Projekts</abbr>**.
/// tip | Tipp
Sie müssen dies **einmal pro Projekt** tun, nicht jedes Mal, wenn Sie daran arbeiten.
///
//// tab | `venv`
Um eine virtuelle Umgebung zu erstellen, können Sie das `venv`-Modul verwenden, das mit Python geliefert wird.
<div class="termy">
```console
$ python -m venv .venv
```
</div>
/// details | Was dieser Befehl bedeutet
* `python`: das Programm namens `python` verwenden
* `-m`: ein Modul als Skript aufrufen, wir geben als nächstes an, welches Modul
* `venv`: das Modul namens `venv` verwenden, das normalerweise mit Python installiert wird
* `.venv`: die virtuelle Umgebung im neuen Verzeichnis `.venv` erstellen
///
////
//// tab | `uv`
Wenn Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> installiert haben, können Sie es verwenden, um eine virtuelle Umgebung zu erstellen.
<div class="termy">
```console
$ uv venv
```
</div>
/// tip | Tipp
Standardmäßig erstellt `uv` eine virtuelle Umgebung in einem Verzeichnis namens `.venv`.
Aber Sie könnten es anpassen, indem Sie ein zusätzliches Argument mit dem Verzeichnisnamen übergeben.
///
////
Dieser Befehl erstellt eine neue virtuelle Umgebung in einem Verzeichnis namens `.venv`.
/// details | `.venv` oder ein anderer Name
Sie könnten die virtuelle Umgebung in einem anderen Verzeichnis erstellen, aber es gibt eine Konvention, sie `.venv` zu nennen.
///
## Die virtuelle Umgebung aktivieren
Aktivieren Sie die neue virtuelle Umgebung, damit jeder Python-Befehl, den Sie ausführen oder jedes Paket, das Sie installieren, diese Umgebung verwendet.
/// tip | Tipp
Tun Sie dies **jedes Mal**, wenn Sie eine **neue Terminalsitzung** starten, um an dem Projekt zu arbeiten.
///
//// tab | Linux, macOS
<div class="termy">
```console
$ source .venv/bin/activate
```
</div>
////
//// tab | Windows PowerShell
<div class="termy">
```console
$ .venv\Scripts\Activate.ps1
```
</div>
////
//// tab | Windows Bash
Oder wenn Sie Bash für Windows verwenden (z.B. <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>):
<div class="termy">
```console
$ source .venv/Scripts/activate
```
</div>
////
/// tip | Tipp
Jedes Mal, wenn Sie ein **neues Paket** in dieser Umgebung installieren, aktivieren Sie die Umgebung erneut.
So stellen Sie sicher, dass, wenn Sie ein **Terminalprogramm (<abbr title="Befehlszeilenschnittstelle">CLI</abbr>)** verwenden, das durch dieses Paket installiert wurde, Sie das aus Ihrer virtuellen Umgebung verwenden und nicht eines, das global installiert ist, wahrscheinlich mit einer anderen Version als der, die Sie benötigen.
///
## Überprüfen, ob die virtuelle Umgebung aktiv ist
Überprüfen Sie, dass die virtuelle Umgebung aktiv ist (der vorherige Befehl funktioniert hat).
/// tip | Tipp
Dies ist **optional**, aber es ist eine gute Möglichkeit, **zu überprüfen**, ob alles wie erwartet funktioniert und Sie die virtuelle Umgebung verwenden, die Sie beabsichtigt haben.
///
//// tab | Linux, macOS, Windows Bash
<div class="termy">
```console
$ which python
/home/user/code/awesome-project/.venv/bin/python
```
</div>
Wenn es das `python`-Binary in `.venv/bin/python` anzeigt, innerhalb Ihres Projekts (in diesem Fall `awesome-project`), dann hat es funktioniert. 🎉
////
//// tab | Windows PowerShell
<div class="termy">
```console
$ Get-Command python
C:\Users\user\code\awesome-project\.venv\Scripts\python
```
</div>
Wenn es das `python`-Binary in `.venv\Scripts\python` anzeigt, innerhalb Ihres Projekts (in diesem Fall `awesome-project`), dann hat es funktioniert. 🎉
////
## `pip` aktualisieren
/// tip | Tipp
Wenn Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> verwenden, würden Sie es verwenden, um Dinge zu installieren anstelle von `pip`, sodass Sie nicht `pip` aktualisieren müssen. 😎
///
Wenn Sie `pip` verwenden, um Pakete zu installieren (es wird standardmäßig mit Python geliefert), sollten Sie es auf die neueste Version **upgraden**.
Viele exotische Fehler beim Installieren eines Pakets werden einfach dadurch gelöst, dass zuerst `pip` aktualisiert wird.
/// tip | Tipp
Normalerweise würden Sie dies **einmal** tun, unmittelbar nachdem Sie die virtuelle Umgebung erstellt haben.
///
Stellen Sie sicher, dass die virtuelle Umgebung aktiv ist (mit dem obigen Befehl) und führen Sie dann aus:
<div class="termy">
```console
$ python -m pip install --upgrade pip
---> 100%
```
</div>
## `.gitignore` hinzufügen
Wenn Sie **Git** verwenden (Sie sollten es tun), fügen Sie eine `.gitignore`-Datei hinzu, um alles in Ihrem `.venv` von Git auszuschließen.
/// tip | Tipp
Wenn Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> verwendet haben, um die virtuelle Umgebung zu erstellen, hat es dies bereits für Sie getan; Sie können diesen Schritt überspringen. 😎
///
/// tip | Tipp
Tun Sie dies **einmal**, unmittelbar nachdem Sie die virtuelle Umgebung erstellt haben.
///
<div class="termy">
```console
$ echo "*" > .venv/.gitignore
```
</div>
/// details | Was dieser Befehl bedeutet
* `echo "*"`: wird den Text `*` im Terminal "drucken" (der nächste Teil ändert das ein wenig)
* `>`: alles, was durch den Befehl links von `>` im Terminal ausgegeben wird, sollte nicht gedruckt, sondern stattdessen in die Datei geschrieben werden, die rechts von `>` kommt
* `.gitignore`: der Name der Datei, in die der Text geschrieben werden soll
Und `*` bedeutet für Git "alles". Also wird alles im `.venv`-Verzeichnis ignoriert.
Dieser Befehl erstellt eine Datei `.gitignore` mit dem Inhalt:
```gitignore
*
```
///
## Pakete installieren
Nachdem Sie die Umgebung aktiviert haben, können Sie Pakete darin installieren.
/// tip | Tipp
Tun Sie dies **einmal**, wenn Sie die Pakete installieren oder aktualisieren, die Ihr Projekt benötigt.
Wenn Sie eine Version aktualisieren oder ein neues Paket hinzufügen müssen, würden Sie **dies erneut tun**.
///
### Pakete direkt installieren
Wenn Sie es eilig haben und keine Datei verwenden möchten, um die Paketanforderungen Ihres Projekts zu deklarieren, können Sie sie direkt installieren.
/// tip | Tipp
Es ist eine (sehr) gute Idee, die Pakete und Versionen, die Ihr Programm benötigt, in einer Datei zu speichern (zum Beispiel `requirements.txt` oder `pyproject.toml`).
///
//// tab | `pip`
<div class="termy">
```console
$ pip install "fastapi[standard]"
---> 100%
```
</div>
////
//// tab | `uv`
Wenn Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> haben:
<div class="termy">
```console
$ uv pip install "fastapi[standard]"
---> 100%
```
</div>
////
### Installation von `requirements.txt`
Wenn Sie eine `requirements.txt` haben, können Sie diese nun verwenden, um deren Pakete zu installieren.
//// tab | `pip`
<div class="termy">
```console
$ pip install -r requirements.txt
---> 100%
```
</div>
////
//// tab | `uv`
Wenn Sie <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> haben:
<div class="termy">
```console
$ uv pip install -r requirements.txt
---> 100%
```
</div>
////
/// details | `requirements.txt`
Eine `requirements.txt` mit einigen Paketen könnte folgendermaßen aussehen:
```requirements.txt
fastapi[standard]==0.113.0
pydantic==2.8.0
```
///
## Ihr Programm ausführen
Nachdem Sie die virtuelle Umgebung aktiviert haben, können Sie Ihr Programm ausführen, und es wird das Python innerhalb Ihrer virtuellen Umgebung mit den dort installierten Paketen verwenden.
<div class="termy">
```console
$ python main.py
Hello World
```
</div>
## Ihren Editor konfigurieren
Sie würden wahrscheinlich einen Editor verwenden, stellen Sie sicher, dass Sie ihn so konfigurieren, dass er die gleiche virtuelle Umgebung verwendet, die Sie erstellt haben (es wird sie wahrscheinlich automatisch erkennen), sodass Sie Autovervollständigungen und Inline-Fehler erhalten können.
Zum Beispiel:
* <a href="https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment" class="external-link" target="_blank">VS Code</a>
* <a href="https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html" class="external-link" target="_blank">PyCharm</a>
/// tip | Tipp
Normalerweise müssen Sie dies nur **einmal** tun, wenn Sie die virtuelle Umgebung erstellen.
///
## Die virtuelle Umgebung deaktivieren
Sobald Sie mit der Arbeit an Ihrem Projekt fertig sind, können Sie die virtuelle Umgebung **deaktivieren**.
<div class="termy">
```console
$ deactivate
```
</div>
Auf diese Weise, wenn Sie `python` ausführen, wird es nicht versuchen, es aus dieser virtuellen Umgebung mit den dort installierten Paketen auszuführen.
## Bereit zu arbeiten
Jetzt sind Sie bereit, mit Ihrem Projekt zu arbeiten.
/// tip | Tipp
Möchten Sie verstehen, was das alles oben bedeutet?
Lesen Sie weiter. 👇🤓
///
## Warum virtuelle Umgebungen
Um mit FastAPI zu arbeiten, müssen Sie <a href="https://www.python.org/" class="external-link" target="_blank">Python</a> installieren.
Danach müssen Sie FastAPI und alle anderen Pakete, die Sie verwenden möchten, **installieren**.
Um Pakete zu installieren, würden Sie normalerweise den `pip` Befehl verwenden, der mit Python geliefert wird (oder ähnliche Alternativen).
Wenn Sie jedoch `pip` direkt verwenden, werden die Pakete in Ihrer **globalen Python-Umgebung** (der globalen Installation von Python) installiert.
### Das Problem
Was ist also das Problem beim Installieren von Paketen in der globalen Python-Umgebung?
Irgendwann werden Sie wahrscheinlich viele verschiedene Programme schreiben, die von **verschiedenen Paketen** abhängen. Und einige dieser Projekte, an denen Sie arbeiten, werden von **verschiedenen Versionen** desselben Pakets abhängen. 😱
Zum Beispiel könnten Sie ein Projekt namens `philosophers-stone` erstellen, dieses Programm hängt von einem anderen Paket namens **`harry`, Version `1`** ab. Also müssen Sie `harry` installieren.
```mermaid
flowchart LR
stone(philosophers-stone) -->|erfordert| harry-1[harry v1]
```
Dann erstellen Sie zu einem späteren Zeitpunkt ein weiteres Projekt namens `prisoner-of-azkaban`, und dieses Projekt hängt ebenfalls von `harry` ab, aber dieses Projekt benötigt **`harry` Version `3`**.
```mermaid
flowchart LR
azkaban(prisoner-of-azkaban) --> |erfordert| harry-3[harry v3]
```
Aber jetzt ist das Problem, wenn Sie die Pakete global (in der globalen Umgebung) installieren anstatt in einer lokalen **virtuellen Umgebung**, müssen Sie wählen, welche Version von `harry` zu installieren ist.
Wenn Sie `philosophers-stone` ausführen möchten, müssen Sie zuerst `harry` Version `1` installieren, zum Beispiel mit:
<div class="termy">
```console
$ pip install "harry==1"
```
</div>
Und dann hätten Sie `harry` Version `1` in Ihrer globalen Python-Umgebung installiert.
```mermaid
flowchart LR
subgraph global[globale Umgebung]
harry-1[harry v1]
end
subgraph stone-project[philosophers-stone Projekt]
stone(philosophers-stone) -->|erfordert| harry-1
end
```
Aber dann, wenn Sie `prisoner-of-azkaban` ausführen möchten, müssen Sie `harry` Version `1` deinstallieren und `harry` Version `3` installieren (oder einfach die Version `3` installieren, würde die Version `1` automatisch deinstallieren).
<div class="termy">
```console
$ pip install "harry==3"
```
</div>
Und dann hätten Sie `harry` Version `3` in Ihrer globalen Python-Umgebung installiert.
Und wenn Sie versuchen, `philosophers-stone` erneut auszuführen, besteht die Möglichkeit, dass es **nicht funktioniert**, weil es `harry` Version `1` benötigt.
```mermaid
flowchart LR
subgraph global[globale Umgebung]
harry-1[<strike>harry v1</strike>]
style harry-1 fill:#ccc,stroke-dasharray: 5 5
harry-3[harry v3]
end
subgraph stone-project[philosophers-stone Projekt]
stone(philosophers-stone) -.-x|⛔️| harry-1
end
subgraph azkaban-project[prisoner-of-azkaban Projekt]
azkaban(prisoner-of-azkaban) --> |erfordert| harry-3
end
```
/// tip | Tipp
Es ist sehr häufig in Python-Paketen, zu versuchen, **Breaking Changes** in **neuen Versionen** zu vermeiden, aber es ist besser, auf Nummer sicher zu gehen und neue Versionen absichtlich zu installieren und sie zu testen, um sicherzustellen, dass alles korrekt funktioniert.
///
Stellen Sie sich das jetzt mit **vielen** anderen **Paketen** vor, von denen alle Ihre **Projekte abhängen**. Das ist sehr schwierig zu verwalten. Und Sie würden wahrscheinlich einige Projekte mit einigen **inkompatiblen Versionen** der Pakete ausführen und nicht wissen, warum etwas nicht funktioniert.
Darüber hinaus könnte es je nach Ihrem Betriebssystem (z.B. Linux, Windows, macOS) bereits mit installiertem Python geliefert worden sein. Und in diesem Fall hatte es wahrscheinlich einige Pakete mit bestimmten Versionen **installiert**, die von Ihrem System benötigt werden. Wenn Sie Pakete in der globalen Python-Umgebung installieren, könnten Sie einige der Programme, die mit Ihrem Betriebssystem geliefert wurden, **kaputtmachen**.
## Wo werden Pakete installiert
Wenn Sie Python installieren, werden einige Verzeichnisse mit einigen Dateien auf Ihrem Rechner erstellt.
Einige dieser Verzeichnisse sind dafür zuständig, alle Pakete, die Sie installieren, aufzunehmen.
Wenn Sie ausführen:
<div class="termy">
```console
// Führen Sie dies jetzt nicht aus, es ist nur ein Beispiel 🤓
$ pip install "fastapi[standard]"
---> 100%
```
</div>
Das lädt eine komprimierte Datei mit dem FastAPI-Code herunter, normalerweise von <a href="https://pypi.org/project/fastapi/" class="external-link" target="_blank">PyPI</a>.
Es wird auch Dateien für andere Pakete **herunterladen**, von denen FastAPI abhängt.
Dann wird es all diese Dateien **extrahieren** und sie in ein Verzeichnis auf Ihrem Rechner legen.
Standardmäßig werden diese heruntergeladenen und extrahierten Dateien in das Verzeichnis gelegt, das mit Ihrer Python-Installation geliefert wird, das ist die **globale Umgebung**.
## Was sind virtuelle Umgebungen
Die Lösung für die Probleme, alle Pakete in der globalen Umgebung zu haben, besteht darin, eine **virtuelle Umgebung für jedes Projekt** zu verwenden, an dem Sie arbeiten.
Eine virtuelle Umgebung ist ein **Verzeichnis**, das der globalen Umgebung sehr ähnlich ist, in dem Sie die Pakete für ein Projekt installieren können.
Auf diese Weise hat jedes Projekt seine eigene virtuelle Umgebung (`.venv`-Verzeichnis) mit seinen eigenen Paketen.
```mermaid
flowchart TB
subgraph stone-project[philosophers-stone Projekt]
stone(philosophers-stone) --->|erfordert| harry-1
subgraph venv1[.venv]
harry-1[harry v1]
end
end
subgraph azkaban-project[prisoner-of-azkaban Projekt]
azkaban(prisoner-of-azkaban) --->|erfordert| harry-3
subgraph venv2[.venv]
harry-3[harry v3]
end
end
stone-project ~~~ azkaban-project
```
## Was bedeutet das Aktivieren einer virtuellen Umgebung
Wenn Sie eine virtuelle Umgebung aktivieren, zum Beispiel mit:
//// tab | Linux, macOS
<div class="termy">
```console
$ source .venv/bin/activate
```
</div>
////
//// tab | Windows PowerShell
<div class="termy">
```console
$ .venv\Scripts\Activate.ps1
```
</div>
////
//// tab | Windows Bash
Oder wenn Sie Bash für Windows verwenden (z.B. <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>):
<div class="termy">
```console
$ source .venv/Scripts/activate
```
</div>
////
Dieser Befehl erstellt oder modifiziert einige [Umgebungsvariablen](environment-variables.md){.internal-link target=_blank}, die für die nächsten Befehle verfügbar sein werden.
Eine dieser Variablen ist die `PATH`-Variable.
/// tip | Tipp
Sie können mehr über die `PATH`-Umgebungsvariable im [Abschnitt Umgebungsvariablen](environment-variables.md#path-environment-variable){.internal-link target=_blank} erfahren.
///
Das Aktivieren einer virtuellen Umgebung fügt ihren Pfad `.venv/bin` (auf Linux und macOS) oder `.venv\Scripts` (auf Windows) zur `PATH`-Umgebungsvariable hinzu.
Angenommen, die `PATH`-Variable sah vor dem Aktivieren der Umgebung so aus:
//// tab | Linux, macOS
```plaintext
/usr/bin:/bin:/usr/sbin:/sbin
```
Das bedeutet, dass das System nach Programmen sucht in:
* `/usr/bin`
* `/bin`
* `/usr/sbin`
* `/sbin`
////
//// tab | Windows
```plaintext
C:\Windows\System32
```
Das bedeutet, dass das System nach Programmen sucht in:
* `C:\Windows\System32`
////
Nach dem Aktivieren der virtuellen Umgebung würde die `PATH`-Variable folgendermaßen aussehen:
//// tab | Linux, macOS
```plaintext
/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
Das bedeutet, dass das System nun zuerst nach Programmen sucht in:
```plaintext
/home/user/code/awesome-project/.venv/bin
```
bevor es in den anderen Verzeichnissen sucht.
Wenn Sie also `python` im Terminal eingeben, wird das System das Python-Programm in
```plaintext
/home/user/code/awesome-project/.venv/bin/python
```
finden und dieses verwenden.
////
//// tab | Windows
```plaintext
C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
```
Das bedeutet, dass das System nun zuerst nach Programmen sucht in:
```plaintext
C:\Users\user\code\awesome-project\.venv\Scripts
```
bevor es in den anderen Verzeichnissen sucht.
Wenn Sie also `python` im Terminal eingeben, wird das System das Python-Programm in
```plaintext
C:\Users\user\code\awesome-project\.venv\Scripts\python
```
finden und dieses verwenden.
////
Ein wichtiger Punkt ist, dass es den Pfad der virtuellen Umgebung am **Anfang** der `PATH`-Variable platziert. Das System wird es **vor** allen anderen verfügbaren Pythons finden. Auf diese Weise, wenn Sie `python` ausführen, wird das Python **aus der virtuellen Umgebung** verwendet anstelle eines anderen `python` (zum Beispiel, einem `python` aus einer globalen Umgebung).
Das Aktivieren einer virtuellen Umgebung ändert auch ein paar andere Dinge, aber dies ist eines der wichtigsten Dinge, die es tut.
## Überprüfung einer virtuellen Umgebung
Wenn Sie überprüfen, ob eine virtuelle Umgebung aktiv ist, zum Beispiel mit:
//// tab | Linux, macOS, Windows Bash
<div class="termy">
```console
$ which python
/home/user/code/awesome-project/.venv/bin/python
```
</div>
////
//// tab | Windows PowerShell
<div class="termy">
```console
$ Get-Command python
C:\Users\user\code\awesome-project\.venv\Scripts\python
```
</div>
////
Das bedeutet, dass das `python`-Programm, das verwendet wird, das in der **virtuellen Umgebung** ist.
Sie verwenden `which` auf Linux und macOS und `Get-Command` in Windows PowerShell.
Der Befehl funktioniert so, dass er in der `PATH`-Umgebungsvariable nachgeht und durch **jeden Pfad in der Reihenfolge** geht, um nach dem Programm namens `python` zu suchen. Sobald er es findet, zeigt er Ihnen den Pfad zu diesem Programm.
Das Wichtigste ist, dass, wenn Sie `python` aufrufen, genau dieses "`python`" ausgeführt wird.
So können Sie überprüfen, ob Sie sich in der richtigen virtuellen Umgebung befinden.
/// tip | Tipp
Es ist einfach, eine virtuelle Umgebung zu aktivieren, eine Python-Version zu erhalten und dann **zu einem anderen Projekt zu wechseln**.
Und das zweite Projekt **würde nicht funktionieren**, weil Sie das **falsche Python** verwenden, aus einer virtuellen Umgebung für ein anderes Projekt.
Es ist nützlich, überprüfen zu können, welches `python` verwendet wird. 🤓
///
## Warum eine virtuelle Umgebung deaktivieren
Zum Beispiel könnten Sie an einem Projekt `philosophers-stone` arbeiten, diese virtuelle Umgebung **aktivieren**, Pakete installieren und mit dieser Umgebung arbeiten.
Und dann möchten Sie an **einem anderen Projekt** `prisoner-of-azkaban` arbeiten.
Sie gehen zu diesem Projekt:
<div class="termy">
```console
$ cd ~/code/prisoner-of-azkaban
```
</div>
Wenn Sie die virtuelle Umgebung für `philosophers-stone` nicht deaktivieren, wird beim Ausführen von `python` im Terminal versucht, das Python von `philosophers-stone` zu verwenden.
<div class="termy">
```console
$ cd ~/code/prisoner-of-azkaban
$ python main.py
// Fehler beim Importieren von sirius, es ist nicht installiert 😱
Traceback (most recent call last):
File "main.py", line 1, in <module>
import sirius
```
</div>
Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-azkaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet.
<div class="termy">
```console
$ cd ~/code/prisoner-of-azkaban
// Sie müssen nicht im alten Verzeichnis sein, um zu deaktivieren, Sie können dies überall tun, sogar nachdem Sie zu einem anderen Projekt gewechselt haben 😎
$ deactivate
// Aktivieren Sie die virtuelle Umgebung in prisoner-of-azkaban/.venv 🚀
$ source .venv/bin/activate
// Jetzt, wenn Sie python ausführen, wird das Paket sirius in dieser virtuellen Umgebung gefunden ✨
$ python main.py
Ich schwöre feierlich 🐺
```
</div>
## Alternativen
Dies ist ein einfacher Leitfaden, um Ihnen den Einstieg zu erleichtern und Ihnen beizubringen, wie alles **unter der Haube** funktioniert.
Es gibt viele **Alternativen** zur Verwaltung virtueller Umgebungen, Paketabhängigkeiten (Anforderungen), Projekte.
Sobald Sie bereit sind und ein Tool verwenden möchten, das **das gesamte Projekt verwaltet**, Paketabhängigkeiten, virtuelle Umgebungen usw., würde ich Ihnen vorschlagen, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a> auszuprobieren.
`uv` kann viele Dinge tun, es kann:
* **Python installieren** für Sie, einschließlich verschiedener Versionen
* Die **virtuelle Umgebung** für Ihre Projekte verwalten
* **Pakete installieren**
* Paket**abhängigkeiten und Versionen** für Ihr Projekt verwalten
* Sicherstellen, dass Sie eine **exakte** Menge an Paketen und Versionen zur Installation haben, einschließlich ihrer Abhängigkeiten, damit Sie sicher sein können, dass Sie Ihr Projekt in der Produktionsumgebung genauso ausführen können wie auf Ihrem Rechner während der Entwicklung, dies wird **Sperren** genannt
* Und viele andere Dinge
## Fazit
Wenn Sie das alles gelesen und verstanden haben, wissen Sie jetzt **viel mehr** über virtuelle Umgebungen als viele Entwickler da draußen. 🤓
Das Wissen über diese Details wird wahrscheinlich nützlich in einer zukünftigen Zeit sein, wenn Sie etwas entwickeln, das komplex erscheint, aber Sie werden wissen, **wie alles unter der Haube funktioniert**. 😎
Loading…
Cancel
Save