Commit 03b2abe2 authored by Jochen Schulz's avatar Jochen Schulz
Browse files

improve module management

parent 4fc2a9c7
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
def print_odds(numbers):
for n in numbers:
if n % 2 == 0:
......
import debugger
debugger.print_odds(range(0,10))
\ No newline at end of file
......@@ -14,7 +14,7 @@ kernelspec:
## Aufgabe 1
Übertragen Sie die Aufgaben vom vorigen Zettel (4) in Dateien und führen Sie sie dann in Spyder nochmal aus. Machen Sie sich dabei vertraut mit der Bedienung von Spyder.
Übertragen Sie die Aufgaben vom vorigen Zettel (4) in Dateien und führen Sie sie dann in einer IDE nochmal aus. Machen Sie sich dabei vertraut mit der Bedienung der IDE (Visual Studio Code, Spyder, Atom, ...).
*Hinweis*: Erst die python-Umgebung starten (auf unseren System, auf dem eigenen Gerät sieht das anders aus):
......@@ -22,7 +22,7 @@ kernelspec:
nix-shell -p python3Packages.pnam
```
und dann in der neuen shell:
und dann in der neuen shell z.B. Spyder starten:
``` bash
spyder3
......
......@@ -4,8 +4,10 @@ jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
jupytext_version: 1.10.3
kernelspec:
display_name: Python 3
display_name: Python 3 (ipykernel)
language: python
name: python3
---
......@@ -175,58 +177,37 @@ einer IDE (Integrated Development Environment).
### Editoren und IDEs
Als Text-Editor/IDE nutzen stellen wir hier **Spyder** vor (hier im System über die Kommandozeile starten, nachdem man in die `pnam`-Umgebung gewechselt hat):
Als Text-Editor/IDE nutzen stellen wir hier [**Visual Studio Code**](https://code.visualstudio.com/) vor.
``` bash
nix-shell -p python3Packages.pnam
spyder3
```
Spyder ist eine gute Mischung aus einfachen Editor mit integrierten Python-Features wie einem Hilfe-Browser und einer Kommando-Zeile. Eine weitere Möglichkeit ist **Atom**, ein sehr mächtiger Editor, der für sehr viele Sprachen gute Unterstützung liefert, aber auch etwas komplexer in der Benutzung ist.
*Visual Studio Code* (Code) ist eine gute open source IDE, die sehr erweiterbar ist. Für Python braucht man zusätzlich noch die *Python* extension. Diese kann unter extensions direkt in der IDE installiert werden.
![](../../data/images/spyder.png)
![](../../data/images/codeoss_python.png)
Spyder besteht aus den wesentlichen Elementen:
Code besteht aus den wesentlichen Elementen:
#### Editor
Hier werden die Dateien bearbeitet. Die aktuelle Datei lässt sich mit `F5` ausführen.
#### Variable Explorer
Zeigt die im aktuellen Scope befindlichen Variablen an und erlaubt diese z.T. interaktiv zu bearbeiten.
#### IPython Console
Interaktive Konsole zum Ausführen von Python-Befehlen. Ipython wird ebenfalls in den
Code-Zellen von Jupyter verwendet.
#### Hilfe
#### Help
Zeigt Dokumentation zu Modulen und Funktionen an, wenn man im Editor oder der Console `Strg+i` drückt, während der Cursor auf dem entsprechenden Namen ist.
Es gibt diverse Tooltips um die Dokumentation der Funktionen zu zeigen als auch Referenzen von Variablen über das Projekt hinweg.
### Debugger
Ein *Bug* ist ein logischer Fehler im Programm. Im Gegensatz zu Syntax-Fehlern können diese nicht automatisch detektiert werden. Dementsprechend ist der *Debugger* ein Hilfsmittel, um *Bugs* und algorithmische Fehler zu finden und zu eliminieren. Der Debugger erlaubt es, das Programm an bestimmten Punkten anzuhalten, sich die Werte diverser Variablen anzusehen und die einzelnen Befehle schrittweise durchzugehen.
Ein *Breakpoint* wird in einer Codezeile mit `F12` gesetzt. Danach muss man das Programm im *Debug-Modus* ausführen. Wenn der Programm-Fluss die Codezeile erreicht, wird die Ausführung unterbrochen. Im *Variable Explorer* kann man sich den aktuellen Scope ansehen.
Mit `Strg+F10` wird der aktuelle Befehl ausgeführt und zum nächsten gesprungen. Mit `Strg+F12` wird die normale Ausführung fortgesetzt, ggf. bis zum nächsten Breakpoint; mit `Strg+Shift+F12` wird das Programm abgebrochen. Weitere Möglichkeiten findet man im `Debug`-Menü.
Ein *Breakpoint* wird in einer Codezeile links neben der Zeilennummer gesetzt durch einen Klick. Danach muss man das Programm im *Debug-Modus* ausführen. Wenn der Programm-Fluss die Codezeile erreicht, wird die Ausführung unterbrochen. Im *Variables*-Fenster kann man sich den aktuellen Scope ansehen.
Außerdem schaltet die Konsole um in den Debug-Modus (gekennzeichnet durch `ipdb>`). Von hier kann man ebenfalls den Debug-Modus per Kommando steuern. Einige Befehle:
Mit `F10` wird der aktuelle Befehl ausgeführt und zum nächsten gesprungen. Mit `F5` wird die normale Ausführung fortgesetzt, ggf. bis zum nächsten Breakpoint; mit `Shift+F5` wird das Programm abgebrochen. Weitere Möglichkeiten findet man im Menü `Run`.
- `p <Ausdruck>` wertet einen Ausdruck aus und zeigt das Ergebnis an,
- `h` zeight die Hilfe der Debug-Kommandos,
- `c` setzt das Programm fort,
- `n` führt den aktuellen Befehl aus und springt zum nächsten.
![](../../data/images/debugger1.png)
![](../../data/images/codeoss.png)
#### Beispiel Debugger
Wir zeigen anhand folgenden Beispiels die Funktionsweise des Debuggers:
```{code-cell}
```{code-cell} ipython3
def print_odds(numbers):
for n in numbers:
if n % 2 == 0:
......@@ -239,7 +220,7 @@ print_odds(range(10))
### Eigene Module erzeugen
Eigene Module kann man erzeugen, indem man den entsprechenden Code in eine Datei mit Erweiterung `.py` schreibt. In anderen Dateien im selben Verzeichnis kann das Modul dann über `import modul` importiert werden, wobei `modul` der Dateiname *ohne Erweiterung* ist.
Außerdem kann man dies im Jupter dann importiert und damit arbeiten.
Außerdem kann man dies im Jupyter dann importieren und damit arbeiten.
#### Beispiel
......@@ -290,8 +271,8 @@ die jeweiligen anderen Dateien.
Wenn wir (größere) Module im Editor schreiben, wollen wir dennoch gern Jupyter als Frontend benutzen, weil es uns viele Möglichkeiten der Ausgabe und Verarbeitung bietet. Damit das gut klappt, gehen wir wie folgt vor:
* Ein Modul im Editor (z.B. Spyder) schreiben/editieren
* ein lokales(!) jupyter notebook öffnen
* Ein Modul im Editor (z.B. Code) schreiben/editieren
* ein lokales jupyter notebook öffnen
* dort in einer Zelle schreiben
```{code-block}
......@@ -301,3 +282,9 @@ Wenn wir (größere) Module im Editor schreiben, wollen wir dennoch gern Jupyter
```
Dann wird das Modul automatisch neu geladen, wenn wir es im Editor (lokal) ändern.
Es ist auch möglich dies im Jupyterlab der GWDG zu tun. Dafür kann man eine python-datei hochladen oder dort editieren. Dann kann im normalen Jupyter-Tab der import durchgeführt werden.
```{code-cell} ipython3
```
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment