Sechs Dinge, alle fuer das jetzt oeffentliche Repository. LIZENZEN. LICENSE traegt die MIT-Lizenz fuer den Programmcode (alle .py, Notebooks, Dockerfile, pyproject.toml), LICENSE-TEXT.md die CC BY-SA 4.0 fuer Buchtext, PDF, Website und Diagramme. Beide Dateien nennen ausdruecklich, was sie abdecken und was nicht - ein Codeblock im Buchtext bleibt Programmcode und steht unter MIT. Vorher hatte das Repository gar keine Lizenz, womit standardmaessig "alle Rechte vorbehalten" galt und niemand die 76 Programme haette weiterverwenden duerfen. COLAB. COLAB_BASIS_URL steht jetzt auf "". Der Platzhalter zeigte auf GitHub, das Repository liegt auf einer eigenen Forgejo-Instanz - und Colab oeffnet Notebooks NUR aus GitHub, Google Drive oder einem Upload. Die URL-Form colab.research.google.com/github/... ist fest auf GitHub verdrahtet; eine selbstgehostete Adresse dort einzusetzen ergaebe keinen Link zum eigenen Server, sondern einen toten GitHub-Link. Der Kommentar im Quelltext ging von GitHub aus und war damit selbst irrefuehrend; er ist ersetzt. Verloren geht nichts: Die 25 Notebooks liegen neben der Website und bekommen einen echten Download-Link, jetzt mit dem Hinweis, was man damit tut - "herunterladen und in Jupyter oeffnen, in Colab hochladen oder mit dem Kurs-Image starten". JUPYTERLAB IM KURS-IMAGE. Neue pyproject-Gruppe [notebook] mit jupyterlab, die Notebooks werden ins Image kopiert, und ein kleiner Startbefehl macht beide Betriebsarten ohne --entrypoint moeglich: ohne Argument JupyterLab, mit Argument ein einzelnes Programm. Gebaut und geprueft - Rucksack.py laeuft, JupyterLab antwortet mit HTTP 200 und zeigt alle 25 Notebooks. Image 1,31 -> 1,46 GB. Es laeuft ohne Token, deshalb im README die Portfreigabe an 127.0.0.1 gebunden. README KOMPLETT NEU. Es war die Bau-Anleitung eines privaten Verzeichnisses und ist jetzt die Visitenkarte eines oeffentlichen Repositorys: was das Buch ist, wo man es liest, drei Wege die Beispiele auszufuehren (Container, schlanke Installation, alles auf einmal), was hier liegt, wie man baut, die Colab-Frage, die Lizenzen und wie man mitwirkt. Alle relativen Links geprueft: 0 tot. .gitattributes. Ohne die Datei entschied core.autocrlf des jeweiligen Rechners, was beim Klonen passiert - ein Windows-Leser bekam CRLF-Rauschen in jedem Diff. Jetzt: im Repository immer LF, im Arbeitsverzeichnis passend zum System, Binaerdateien ausdruecklich ausgenommen. Der Bestand war bereits sauber (git add --renormalize aendert null Dateien). Zusaetzlich sind die erzeugten Verzeichnisse als linguist-generated markiert, sonst zaehlt die Sprachstatistik das Repository als HTML-Projekt. PROGRESS.md: Remote-Repository als erledigt markiert, der Colab-Befund festgehalten. CLAUDE.md um Veroeffentlichung, Lizenzen und die neuen Dateien ergaenzt. Geprueft: --check ohne Fehler, 0 tote README-Links, 76 Programme unveraendert, 33 pytest-Tests, pyproject baut mit acht Gruppen, PDF 759 Seiten (eine weniger - die Colab-Zeile entfaellt in 25 Kapiteln). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
115 lines
4.2 KiB
TOML
115 lines
4.2 KiB
TOML
# Paketbeschreibung fuer die Beispielprogramme des Buchs
|
|
# "Optimierte Entscheidungsfindung mit Python".
|
|
#
|
|
# Zweck: schlanke, gezielt zusammengestellte Umgebungen. Wer nur die ersten
|
|
# Kapitel durcharbeitet, braucht weder yfinance noch FastAPI.
|
|
#
|
|
# pip install -e . # Grundausstattung, traegt den Grossteil des Buchs
|
|
# pip install -e ".[finance]" # Teil "Anwendungen": Markowitz, CVaR, Handelsmaschine
|
|
# pip install -e ".[large-scale]" # HiGHS, Pyomo, linopy, polars
|
|
# pip install -e ".[api]" # Kapitel "Testen, Messen, Ausliefern"
|
|
# pip install -e ".[figures]" # nur zum Neuerzeugen der Diagramme
|
|
# pip install -e ".[dev]" # Tests
|
|
# pip install -e ".[alles]" # alles zusammen - siehe Warnung unten
|
|
#
|
|
# ACHTUNG, Solverkonflikt: ortools und highspy bringen jeweils eine eigene
|
|
# HiGHS-Kopie mit und lassen sich nicht im selben Prozess importieren. ortools
|
|
# steht deshalb in der Grundausstattung, highspy erst in [large-scale] - wer nur
|
|
# "pip install -e ." nutzt, kann in den Konflikt gar nicht geraten. cvxpy zieht
|
|
# ein installiertes highspy bei der Solver-Erkennung selbst mit hinein, [finance]
|
|
# loest ihn also indirekt ebenfalls aus. Die Programme des Buchs umgehen das
|
|
# durch getrennte Prozesse (Muster: Ein_System_Vier_Ansaetze.py); ausfuehrlich
|
|
# steht es im Kapitel "Das Python-Oekosystem fuer OR".
|
|
#
|
|
# Die Datei ergaenzt
|
|
# Operations_Research_mit_Python_Version_04_Programme/requirements.txt und
|
|
# ersetzt sie nicht: Jene ist im Buch abgedruckt und installiert bewusst alles
|
|
# auf einen Schlag.
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "or-mit-python"
|
|
version = "4.0.0"
|
|
description = "Beispielprogramme zum Buch 'Optimierte Entscheidungsfindung mit Python'"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
authors = [{ name = "Dieter Schlüter", email = "dieter.schlueter@linix.de" }]
|
|
keywords = ["operations-research", "optimierung", "linear-programming",
|
|
"constraint-programming", "milp", "lehrbuch"]
|
|
|
|
# Grundausstattung: traegt die Kapitel bis einschliesslich Graphen und Touren.
|
|
# scipy liefert linprog/milp, ortools den CP-SAT-Solver und pywraplp.
|
|
dependencies = [
|
|
"numpy>=2.5.2",
|
|
"scipy>=1.17.1",
|
|
"pandas>=3.0.1",
|
|
"matplotlib>=3.10.8",
|
|
"openpyxl>=3.1.5", # kein direkter Import: Excel-Motor hinter pandas
|
|
"pydantic>=2.12",
|
|
"ortools>=9.15.6755",
|
|
# cvxpy gehoert in die Grundausstattung, nicht in [finance]: Es wird von
|
|
# 13 Programmen gebraucht, darunter dreien im Kapitel Unsicherheit, lange
|
|
# vor dem Finanzteil. Es zieht KEIN highspy nach - der Solverkonflikt
|
|
# entsteht erst mit [large-scale].
|
|
"cvxpy>=1.9.2",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
# Teil "Anwendungen - Energiewirtschaft und Finanzmaerkte"
|
|
finance = [
|
|
"scikit-learn>=1.8.0",
|
|
"yfinance>=1.2.0",
|
|
]
|
|
|
|
# Groessere Modelle, alternative Solver und Modellierungsschichten
|
|
large-scale = [
|
|
"highspy>=1.15.1",
|
|
"Pyomo>=6.7",
|
|
"linopy>=0.3",
|
|
"polars>=1.0",
|
|
]
|
|
|
|
# Kapitel "Testen, Messen, Ausliefern": der Optimierungsdienst
|
|
api = [
|
|
"fastapi>=0.115",
|
|
"uvicorn>=0.30",
|
|
"httpx>=0.27", # Selbsttest des Dienstes ueber den TestClient
|
|
]
|
|
|
|
# Nur zum Neuerzeugen der Diagramme in bilder_04/ - fuer das Lesen und
|
|
# Ausfuehren des Buchs nicht noetig. graphviz braucht zusaetzlich das
|
|
# Kommandozeilenwerkzeug 'dot' aus dem Betriebssystempaket.
|
|
figures = [
|
|
"plotly>=6.0",
|
|
"graphviz>=0.20",
|
|
]
|
|
|
|
dev = [
|
|
"pytest>=8.0",
|
|
]
|
|
|
|
# Die 25 Kapitel-Notebooks im Browser ausfuehren - ohne dass jemand etwas
|
|
# installieren muss. Das Kurs-Image (Dockerfile) bringt diese Gruppe mit.
|
|
notebook = [
|
|
"jupyterlab>=4.0",
|
|
]
|
|
|
|
# pymoo wird im Buch als Bibliothek fuer genetische Algorithmen empfohlen
|
|
# (Kapitel Metaheuristiken), aber von keinem Beispielprogramm importiert.
|
|
# Deshalb steht es hier eigenstaendig und nicht in der Grundausstattung.
|
|
empfehlungen = [
|
|
"pymoo>=0.6",
|
|
]
|
|
|
|
alles = [
|
|
"or-mit-python[finance,large-scale,api,figures,dev,notebook,empfehlungen]",
|
|
]
|
|
|
|
[tool.setuptools]
|
|
# Die Beispielprogramme sind ein erzeugtes Artefakt (extract_programme_04.py)
|
|
# und kein installierbares Paket - hier wird nur der Abhaengigkeitsbaum
|
|
# beschrieben.
|
|
packages = []
|