Fragen zu den Werkzeugen
Diese Fragen prüfen die Verbindungen zwischen den Werkzeugen. Die Fragen zu einem einzelnen Werkzeug stehen auf dessen Seite; hier geht es um das, was erst im Zusammenspiel auffällt.
Reproduzierbarkeit in Stufen
Eine Auswertung soll in zwei Jahren noch dieselben Zahlen liefern. Was hält welche der drei Massnahmen fest: Git, eine Paketumgebung (renv oder venv) und ein Container?
renv.lock oder requirements.txt.
Was von einem Python-Projekt gehört ins Git-Repository?
requirements.txt oder environment.yml, aber nicht der Ordner .venv
.venv ist gross, enthält plattformabhängige Dateien und wird aus der Beschreibung neu erzeugt.
Pfade und Arbeitsverzeichnisse
Ein R-Skript liest read.csv("C:/Users/anna/projekt/daten/messung.csv"). Es soll in einem Container laufen, in den der Projektordner unter /projekt eingehängt ist. Was ist die dauerhafte Lösung?
daten/messung.csv oder here("daten", "messung.csv")
C:/Users/anna anlegen
setwd() an den Anfang stellen
setwd() mit festem Pfad ist genau die Ursache, nicht die Lösung.
Ein Jupyter-Notebook läuft bei dir, bei einer Kollegin bricht es ab. Welche Reihenfolge der Prüfung ist sinnvoll?
Zugangsdaten
Eine Datei .env mit einem Datenbankpasswort liegt im Projektordner. Sie steht in .gitignore. Das Dockerfile enthält COPY . .. Wo landet das Passwort trotzdem?
COPY . . den ganzen Ordner kopiert und .gitignore dafür nicht gilt
.gitignore nicht, sondern .dockerignore. Die Datei muss dort ebenfalls stehen, sonst ist das Passwort in jedem weitergegebenen Image enthalten.
.gitignore schützt die Datei überall
.gitignore gilt nur für Git.
COPY kopiert wird, ist Teil einer Schicht des Images und damit in jeder Kopie davon.
Auf einem gemeinsam genutzten Linux-Server liegt dieselbe .env. Was gehört dort zusätzlich dazu?
chmod 600 .env, damit nur der Besitzer lesen und schreiben kann
.gitignore und .dockerignore regeln die Weitergabe, die Rechte den Zugriff auf dem Rechner selbst.
chmod 777 .env, damit das Skript sie sicher lesen kann
Windows und Linux
Ein unter Windows geschriebenes Shell-Skript bricht im Linux-Container mit /bin/bash^M: bad interpreter ab. Woran liegt es?
^M ist dieses Zeichen. Abhilfe: die Datei mit LF-Zeilenenden speichern, etwa über die Einstellung im Editor, oder in Git mit einer .gitattributes-Zeile *.sh text eol=lf festlegen.
^M stünde nicht im Pfad.
chmod +x
Permission denied.
cut -d, -f3 daten.csv | sort | uniq -c und df["standort"].value_counts() in pandas zählen dieselbe Spalte und liefern verschiedene Zahlen. Was ist die wahrscheinlichste Ursache?
cut kennt kein CSV, nur ein Trennzeichen. Ein Wert wie "Bern, Nord" verschiebt alle folgenden Spalten. pandas liest das Format korrekt.
uniq -c zählt falsch
sort zählt uniq -c korrekt. Ohne sort zählte es nur benachbarte gleiche Zeilen.
value_counts zählt jedes Vorkommen.