pyodide-code
```py live_pyo id=b26cde2c-5b0b-4acb-814e-9f2b3bdd29a9
print("Hello from Pyodide!")
```
http://localhost:3000
python
print("Hello from Pyodide!")
Sleep
Sleep und Ausgabe
from time import sleep
for i in range(10):
print(i, i*i, i**3)
sleep(1)
Fibonacci
Fibonacci ohne Rekursion
def fibonacci(n):
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
else:
seq = [0, 1]
for i in range(2, n):
seq.append(seq[-1] + seq[-2])
return seq
n = int(input("fib von? "))
print(fibonacci(n))
Mit Memoization
Fibonacci mit Memoization
from functools import lru_cache
@lru_cache
def fibonacci(n):
if n in {0, 1}:
return n
return fibonacci(n-1) + fibonacci(n-2)
for n in range(1, 200):
print(f"Fibonacci({n}) = {fibonacci(n)}")
Minimierung mit SciPy
Minimierung mit SciPy
import numpy as np
from scipy import optimize
# Function to minimize: f(x) = (x - 3)^2
def func(x):
return (x - 3) ** 2
# Minimize using scipy.optimize
result = optimize.minimize(func, x0=0)
print("Minimum at x =", result.x[0])
print("Function value at minimum =", result.fun)
Interaktive Komponenten hinzufügen
Das pyodide-code-Package kann erweitert werden - sowohl mit neuen, lokalen Pythin-Bibliotheken als auch mit interaktiven Komponenten, die in React geschrieben sind und mit Python kommunizieren können. Ein Beispiel dafür ist die interaktive Uhr-Komponente:
Interaktive Uhr
<Clock clockId="sbb-uhr" />
```py live_pyo id=d5240fb9-2aab-4e02-8e88-770a117b2068 title=Interaktive_Uhr
from clock import use_clock
from time import sleep
uhr = use_clock("sbb-uhr")
while True:
uhr.set_seconds(uhr.seconds + 1)
sleep(0.01)
```
http://localhost:3000
Uhr: sbb-uhr
Interaktive Uhr
from clock import use_clock
from time import sleep
uhr = use_clock("sbb-uhr")
while True:
uhr.set_seconds(uhr.seconds + 1)
if uhr.seconds % 360 == 0:
sleep(0.99)
uhr.set_minutes(uhr.minutes + 6)
if uhr.minutes % 360 == 0:
uhr.set_hours(uhr.hours + 30)
sleep(0.01)
Implementations-Details
Die Implementierung kann im Seitenspezifischen 👉 ./website-Ordner nachvollzogen werden. Die wesentlichen Teile sind:
- Nachrichten, die von Pyodide empfangen werden, werden an den
siteStore#handleMessageweitergeleitet und können so beliebig verarbeitet werden. - Die Python
clock-Bibliothek wird über./website/packages/pyodide-code/pyodideJsModules/siteModules.tsregistriert und stellt dieuse_clock-Funktion zur Verfügung.siteModules.ts - In
./website/packages/pyodide-code/models/Clock.tswird ein MobX-Modell für die Uhr definiert. Es kann über@tdev/pyodide-code/models/Clockimportiert und in React-Komponenten verwendet werden. - In
./website/packages/pyodide-code/components/Clockwird die eigentliche Uhr-Komponente implementiert, die dasClock-Modell verwendet, um die Zeiger zu positionieren. - In
./website/stores/ClockStore.tswird ein MobX-Store definiert, der die verschiedenen Uhren verwaltet und die Nachrichten von Pyodide verarbeitet. Dieser Store wird im./website/stores/SiteStore.tsregistriert und initialisiert.
Installation
packages/tdev/pyodide-codeKopiere des packages/tdev/pyodide-code-Verzeichnis in das tdev-website/website/packages-Verzeichnis oder über updateTdev.config.yaml hinzufügen.
- Hinzufügen des
pyodide-code-Package zu denapiDocumentProvidersimsiteConfig.ts:siteConfig.tsconst getSiteConfig: SiteConfigProvider = () => {
return {
apiDocumentProviders: [
require.resolve('@tdev/pyodide-code/register'),
]
};
}; - ServiceWorker hinzufügen:
Damit Eingaben von Benutzer:innen abgewartet werden können, braucht es einen Servie-Worker. Dieser muss direkt in den statischen Ordner 👉static/pyodide.sw.jskopiert werden.static/pyodide.sw.js
Danach muss erneut installiert werden:
yarn install