[Erledigt] Docker: Eigenen Python Code testen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

[Erledigt] Docker: Eigenen Python Code testen

Beitrag von buhtz » 08.09.2023 21:17:03

Ich wollte Docker nutzen, um ein eigenes Python Paket mal eben schnell mit einer anderen Python Version testen (pytest) zu können. Bin nicht sicher, aber mir scheint das ein guter Anwendungsfall zu sein.

Die nötigen Schritte beim Bauen und Starten des Containers sind IMHO also
  1. Das Verzeichnis mit dem Code in den Container "kopieren"
  2. Im Container die nötigen Tools nachinstallieren (z.b. pytest)
  3. Das Python Paket aus dem vorliegenden Verzeichnis per "pip install --editable ." installieren
  4. pytest ausführen
Das ist mein Dockerfile

Code: Alles auswählen

FROM python:3.8
ADD buhtzology /home/user/_work/buhtzology
CMD ["python3 -m pip install -e .", "pytest -v"]
Der aktuelle User gehört der Gruppe "docker" an. IMHO muss ich als user bauen, weil ich sonst auf das Verzeichnis mit dem Code nicht zugreifen kann.

Der Bau sieht dann so aus und lässt mich völlig ratlos zurück

Code: Alles auswählen

docker build -t foobar .
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=foobar&target=&ulimits=null&version=1": dial unix /var/run/docker.sock: connect: permission denied
Zuletzt geändert von buhtz am 10.09.2023 13:08:38, insgesamt 1-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Docker: Eigenen Python Code testen

Beitrag von heisenberg » 08.09.2023 21:52:05

buhtz hat geschrieben: ↑ zum Beitrag ↑
08.09.2023 21:17:03
Ich wollte Docker nutzen, um ein eigenes Python Paket mal eben schnell mit einer anderen Python Version testen (pytest) zu können. Bin nicht sicher, aber mir scheint das ein guter Anwendungsfall zu sein.
Dem kann ich zustimmen.
Die nötigen Schritte beim Bauen und Starten des Containers sind IMHO also
  1. Das Verzeichnis mit dem Code in den Container "kopieren"
  2. Im Container die nötigen Tools nachinstallieren (z.b. pytest)
  3. Das Python Paket aus dem vorliegenden Verzeichnis per "pip install --editable ." installieren
  4. pytest ausführen
Das Verzeichnis brauchst Du nicht kopieren, sondern kannst es schlicht einhängen.

Ich würde da grundsätzlich gleich mit Debiandocker-compose zusätzlich zu docker arbeiten. docker-compose enthält die ganzen Laufzeitdirektiven, die Du sonst alle als Parameter docker mitgeben musst:

Datei namens "Dockerfile":

Code: Alles auswählen

FROM python:3.8
RUN python3 -m pip install -e pytest -v
WORKDIR /buhtzology
CMD ["python3 -m pip install -e .", "pytest -v"]
Das passende "docker-compose.yml"

Code: Alles auswählen

version: '2'

services:
  mypytest:
    build: .
    volumes:
      - ./buhtzology:/buthzology
Diese beiden Dateien kopierst Du in ein Arbeitsverzeichnis auf dem Host, samt dem Datenverzeichnis "buhtzology".

Dann rufst Du auf:

Code: Alles auswählen

docker-compose build
docker-compose up
Ohne docker-compose wäre das:

Code: Alles auswählen

docker build -t mypytest .
docker run --name=mypytest -v ./buhtzology:/buhtzology .
Wenn das nicht richtig ausführt und Du noch etwas anpassen musst, dann kannst Du CMD 'bash -c "sleep 3600"' setzen und mit docker exec -ti mypytest /bin/sh in den Container einsteigen und es manuell versuchen. /bin/bash habe ich dabei nicht verwendet, weil ich nicht weiss ob bash in Deinem Container installiert ist.

Code: Alles auswählen

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: \
   Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=\
   &cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D\
   &memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=foobar&target=&ulimits=null&version=1": \
   dial unix /var/run/docker.sock: connect: permission denied
Ich würde schon vermuten, dass da ein Berechtigungsproblem vorliegt, sonst würde das nicht kommen.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Docker: Eigenen Python Code testen

Beitrag von shoening » 09.09.2023 08:46:21

Du könntest statt Docker auch mit Debianpodman und Debianbuildah arbeiten - Podman arbeitet als Container Engine im Userspace.

Oder vielleicht ganz auf Container verzichten und die Python Versionen über pyenv umschalten.
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Docker: Eigenen Python Code testen

Beitrag von buhtz » 09.09.2023 14:05:51

Erst einmal Danke für die Unterstützung. Mir erschließt sich noch nicht, warum ich jetzt eine zweite config Datei dazu brauche, aber ich hab das mal mit compose probiert. Das Image habe ich von "python:3.8" auf "ubuntu:focal" geändert, weil ich den Eindruck hatte, dass beim ersten einiges fehlte. Aber auch bei Ubuntu bleibt der Fehler bestehen (s.u.).

Docker in der Bedienung ist immer noch sehr verwirrend. Was es technisch von einer VM unterscheidet, ist mir schon klar, aber wie man es praktisch nutzt, eben weniger. Wann nehme ich RUN, wann CMD? Was ist mit COPY und ADD? Und welches Image passt besser zu meiner Aufgabe?

Code: Alles auswählen

$ docker-compose build
Building mypytest
Step 1/6 : FROM ubuntu:focal
 ---> 6df894023726
Step 2/6 : RUN apt-get update && apt-get dist-upgrade
 ---> Using cache
 ---> 18cf8264f651
Step 3/6 : RUN apt-get install bash python3 python3-pip -y
 ---> Using cache
 ---> 2733e0a519dd
Step 4/6 : RUN python3 -m pip install -U pip pytest
 ---> Using cache
 ---> 6b000239b045
Step 5/6 : WORKDIR /work
 ---> Using cache
 ---> 3bc1fae2c594
Step 6/6 : RUN ["python3 -m pip install -e .", "pytest -v"]
 ---> Running in 86c0b933f6df
ERROR: Service 'mypytest' failed to build: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "python3 -m pip install -e .": executable file not found in $PATH: unknown
Python3 wird per apt (im RUN) noch installiert. Trotzdem findet er es nicht?

Hier die beiden Dateien

Code: Alles auswählen

$ cat Dockerfile
# FROM python:3.8
FROM ubuntu:focal
RUN apt-get update && apt-get dist-upgrade
RUN apt-get install bash python3 python3-pip -y
RUN python3 -m pip install -U pip pytest
WORKDIR /work
RUN ["python3 -m pip install -e .", "pytest -v"]

$ cat docker-compose.yml
version: '2'

services:
  mypytest:
    build: .
    volumes:
      - ./buhtzology:/work
shoening hat geschrieben: ↑ zum Beitrag ↑
09.09.2023 08:46:21
Du könntest statt Docker auch mit Debianpodman und Debianbuildah arbeiten - Podman arbeitet als Container Engine im Userspace.
Oder vielleicht ganz auf Container verzichten und die Python Versionen über pyenv umschalten.
podman und buildah? Noch zwei neue Tools, die meine Verwirrung verstärken. Wenn mein Ziel mit Grundmittel erreichbar ist, würde ich lieber erst einmal bei den Basics bleiben. Das "pyenv" halte ich für keine gute Lösung, sondern für einen bösen Hack. Es lässt sich nicht einmal "installieren", sondern ich muss mein ganzes System umbiegen, Umgebungsvariablen manipulieren usw und aufpassen dabei nichts zu verpfuschen. Das setze ich nicht auf einem Produktivsystem ein. Nebenbei habe ich auch gelernt dass "tox" auch keine Lösung ist, weil es die verschiedenen parallelen Python Versionen nicht managed, sondern einfach voraussetzt.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Docker: Eigenen Python Code testen

Beitrag von shoening » 09.09.2023 17:27:35

Hi,

der Fehler, den Du in Deinem ersten Beitrag hattest, deutete auf fehlende Rechte beim Zugriff als normaler Benutzer auf den für Docker verwendeten Socket hin.

Daher mein Vorschlag mit podman und buildah. Die beiden bieten in Kombination in etwa das an, was man auch mit Docker machen kann.
Wenn ich mich recht entsinne ist der podman Befehl sogar so geschrieben, dass Du einen alias docker=podman setzen kanns.
Nur das Podman und Buildah die Kontainer eben im Userspace laufen lassen und daher sollten Probleme wie das mit den Rechten auf den Docker Socket nicht passieren.

Bzgl. Entwicklung von Python Programmen kann ich Deine Argumente gegen pyenv nicht nachvollziehen. War nur ein Vorschlag. Viele Wege führen nach Rom - daher noch ein anderer:

Du kannst Dir - wieder ohne Docker oder eine andere Container Technologie - einfach die gewünschte Python Version aus den Sourcen installieren und dir dann mit dem Python venv Modul eine virtuelle Python Umgebung einrichten.

Viele Grüße
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Docker: Eigenen Python Code testen

Beitrag von buhtz » 09.09.2023 21:08:34

Habs (fast)

Das letzte `RUN` sollte ein `CMD` sein
Habe jetzt das Dockerfile angepasst, aber werde weiterhin nicht schlau daraus.

Code: Alles auswählen

# FROM python:3.8
FROM ubuntu:focal
RUN apt-get update && apt-get dist-upgrade
RUN apt-get install bash python3 python3-pip -y
RUN python3 -m pip install -U pip pytest
WORKDIR /work
CMD python3 -m pip install -e .
CMD ls -la
CMD python3 -c "import buhtzology;print(buhtzology.__version__)"
# CMD python3 -m pytest -v
Das ist der output von composer up

Code: Alles auswählen

Starting python38_mypytest_1 ... done
Attaching to python38_mypytest_1
mypytest_1  | Traceback (most recent call last):
mypytest_1  |   File "<string>", line 1, in <module>
mypytest_1  | ModuleNotFoundError: No module named 'buhtzology'
python38_mypytest_1 exited with code 1
Mein Python Paket wird nicht installiert.
Ich sehe aber auch keinen Output von dem "pip install -e ." Kommando.
Ich sehe auch keinen Output vom "ls -la".
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Docker: Eigenen Python Code testen

Beitrag von heisenberg » 09.09.2023 22:35:59

CMD kannst Du nur einmal setzen. Hast Du das mehrmals, zieht das letzte.

CMD ist das ansonsten das Ausführungskommando des Containers. RUN sind Anweisungen die für den Bau des Images nacheinander ausgeführt werden. Dein pip install . Kommando sollte also ein RUN-Kommando sein.

Alternativ dazu, kannst Du, wenn Du mehrere Befehle beim starten des Containers ausführen möchtest, in ein Script packen, oder die Kommandos mit ; getrennt ausführen:

Code: Alles auswählen

CMD pip install .... ; ls -l ; python3 -c "import buhtzology;print(buhtzology.__version__)"
Desweiteren gibt es für die Scriptausführung mittels CMD ( oder ENTRYPOINT ) zwei Formate:

a) CMD kommando parameter1 ...
b) CMD ["kommando", "parameter1", ... ]
Jede Rohheit hat ihren Ursprung in einer Schwäche.

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Docker: Eigenen Python Code testen

Beitrag von buhtz » 10.09.2023 08:11:16

Dein pip install . Kommando sollte also ein RUN-Kommando sein.
Das verwirrt mich etwas. Dann wird das ja beim Bauen und nicht beim "up" ausgeführt.
Ist beim Bauen das gemountete Verzeichnis schon auffindbar? Vermutlich nicht. Das "pip install ." macht nur Sinn, wenn der Python Code auch schon da bzw. gemountet ist.

Aber vielleicht erklärt dass, die nachfolgenden Fehler?

Mhm... Irgendwas passt mit den Pfaden nicht. Die pyproject.toml wird nicht gefunden.

Code: Alles auswählen

# FROM python:3.8
FROM ubuntu:focal
RUN apt-get update && apt-get dist-upgrade
RUN apt-get install bash python3 python3-pip -y
RUN python3 -m pip install -U pip pytest
WORKDIR /work/buhtzology
RUN python3 -m pip install .
CMD ls -lar; python3 -c "import buhtzology;print(buhtzology.__version__)"
# CMD python3 -m pytest -v
In einem compose build

Code: Alles auswählen

Step 6/7 : RUN python3 -m pip install .
 ---> Running in f46383a96edc
ERROR: Directory '.' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.
ERROR: Service 'mypytest' failed to build: The command '/bin/sh -c python3 -m pip install .' returned a non-zero code: 1
Dann hab ich mal das "install ." auskommentiert, damit das ls im CMD wirkt.

Code: Alles auswählen

$ docker-compose up
Starting python38_mypytest_1 ... done
Attaching to python38_mypytest_1
mypytest_1  | total 88
mypytest_1  | drwxr-xr-x 3 1001 1001  4096 Sep  9 19:09 tests
mypytest_1  | drwxr-xr-x 3 1001 1001  4096 Sep  9 06:41 src
mypytest_1  | -rw-r--r-- 1 1001 1001  1388 Sep  9 06:41 pyproject.toml
mypytest_1  | drwxr-xr-x 2 1001 1001  4096 Sep  9 06:41 docs
mypytest_1  | -rw-r--r-- 1 1001 1001  5125 Sep  9 06:41 README.md
mypytest_1  | -rw-r--r-- 1 1001 1001 34670 Sep  9 06:41 LICENSE
mypytest_1  | -rw-r--r-- 1 1001 1001  3330 Sep  9 06:41 CHANGELOG.md
mypytest_1  | -rw-r--r-- 1 1001 1001   571 Sep  9 06:41 .readthedocs.yaml
mypytest_1  | drwxr-xr-x 3 root root  4096 Sep  9 19:09 .pytest_cache
mypytest_1  | -rw-r--r-- 1 1001 1001    83 Sep  9 06:41 .gitignore
mypytest_1  | drwxr-xr-x 8 1001 1001  4096 Sep  9 06:41 .git
mypytest_1  | drwxr-xr-x 3 root root  4096 Sep 10 06:02 ..
mypytest_1  | drwxr-xr-x 7 1001 1001  4096 Sep  9 19:09 .
mypytest_1  | Traceback (most recent call last):
mypytest_1  |   File "<string>", line 1, in <module>
mypytest_1  | ModuleNotFoundError: No module named 'buhtzology'
python38_mypytest_1 exited with code 1
Ich sehe, dass ich direkt im Verzeichnis des Python-Paketes bin. Darin müsste das "install ." auch ausgeführt werden.

Am yml file hab ich auch rumgespielt:

Code: Alles auswählen

$ cat *.yml
version: '2'

services:
  mypytest:
    tty: true
    build: .
    volumes:
      - ./buhtzology:/work/buhtzology
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Docker: Eigenen Python Code testen

Beitrag von heisenberg » 10.09.2023 09:19:47

buhtz hat geschrieben: ↑ zum Beitrag ↑
10.09.2023 08:11:16
Dein pip install . Kommando sollte also ein RUN-Kommando sein.
Das verwirrt mich etwas. Dann wird das ja beim Bauen und nicht beim "up" ausgeführt.
Ist beim Bauen das gemountete Verzeichnis schon auffindbar? Vermutlich nicht. Das "pip install ." macht nur Sinn, wenn der Python Code auch schon da bzw. gemountet ist.
Stimmt. Mein Fehler. Das gemountete Verzeichnis ist zum Build-Zeitpunkt natürlich nicht eingebunden. Also doch obige Variante #2 wählen, in dem alle 3 Befehle durch ; verkettet mit der CMD Direktive ausgeführt werden.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Docker: Eigenen Python Code testen

Beitrag von buhtz » 10.09.2023 13:08:22

Dickes Danke. So geht es. Hier nochmal meine finalen Dateien.

Code: Alles auswählen

# Dockerfile
FROM python:3.8
RUN apt-get update && apt-get dist-upgrade -y
RUN apt-get install bash python3 python3-pip -y
RUN python3 -m pip install -U pip pytest lxml python-docx openpyxl pandas matplotlib seaborn psutil
WORKDIR /work
CMD cp -R ./buhtzology_org ./buhtzology;  python3 -m pip install ./buhtzology; python3 -m pytest -v

Code: Alles auswählen

#docker-compose.yml
version: '2'

services:
  mypytest:
    tty: true
    build: .
    volumes:
      - ./buhtzology:/work/buhtzology_org
Ich habe es etwas modifiziert. Die Abhängigkeiten des meines Python Paketes werden nicht erst aus der pyproject.toml gelesen, sondern schon beim build mit pip installiert. Dadurch ist die Installation des zu testenden Paketes bei der Ausführung des Containers schneller, weil die Abhängigkeiten schon alle erfüllt sind.

Das zu mountende Verzeichnis ist ein Symlink auf mein originales lokales git-repo. Um sicher zu gehen, nutzt der Container nicht direkt dieses mount-share (buhtzology_org), sondern kopiert es sich vorher.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von heisenberg » 10.09.2023 14:53:21

Volumes kann man in Docker auch im Nur-Lese-Modus einhängen:

https://docs.docker.com/storage/volumes/
https://docs.docker.com/compose/compose ... -reference
Jede Rohheit hat ihren Ursprung in einer Schwäche.

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von buhtz » 10.09.2023 17:01:55

Darf ich noch eine Frage nach schieben. Scheinbar gibt es irgendein Phänomen mit Zeichenkodierungen.

Code: Alles auswählen

mypytest_1  |         err_msg = re.escape('only list-like objects are allowed to be '
mypytest_1  |                             'passed to isin(), you passed a [str]')
mypytest_1  |         with self.assertRaisesRegex(TypeError, err_msg):
mypytest_1  | >           bandas.validate_dataframe(
mypytest_1  |                 df_to_check=df,
mypytest_1  |                 expected_columns=ec,
mypytest_1  |                 ignored_columns=[],
mypytest_1  |                 value_rules=vr)
mypytest_1  | E           AssertionError: "only\ list\-like\ objects\ are\ allowed\ to\ be\ passed\ to\ isin\(\),\ you\ passed\ a\ \[str\]" does not match "only list-like objects are allowed to be passed to isin(), you passed a `str`"
Verkürzt ausgedrückt: Diese beiden Strings sind inhaltilch eigentlich korrekt, aber aus irgendeinem Grund werden die Leerzeichen escaped. Ohne Container läuft das problemlos.

Code: Alles auswählen

"only\ list\-like\ objects\ are\ allowed\ to\ be\ passed\ to\ isin\(\),\ you\ passed\ a\ \[str\]"
"only list-like objects are allowed to be passed to isin(), you passed a `str`"
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von heisenberg » 10.09.2023 19:55:09

Da kann ich nix zu sagen. Von Python habe ich recht wenig Ahnung. Ich kann dazu nur sagen, dass der Docker-Container ein komplett anderes OS ist, als das Host-OS - eben das, mit dem, das container-template initial installiert wurde. In dem Fall ist es wohl ein Debian Bookworm. Da muss man schauen, wie man den Docker-Container anpasst (weitere Installationsbefehle), damit sich das wie gewünscht verhält.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

joka63
Beiträge: 24
Registriert: 20.07.2023 23:18:50

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von joka63 » 11.09.2023 20:56:39

buhtz hat geschrieben: ↑ zum Beitrag ↑
10.09.2023 17:01:55
Darf ich noch eine Frage nach schieben. Scheinbar gibt es irgendein Phänomen mit Zeichenkodierungen.

Code: Alles auswählen

mypytest_1  |         err_msg = re.escape('only list-like objects are allowed to be '
mypytest_1  |                             'passed to isin(), you passed a [str]')
mypytest_1  |         with self.assertRaisesRegex(TypeError, err_msg):
mypytest_1  | >           bandas.validate_dataframe(
mypytest_1  |                 df_to_check=df,
mypytest_1  |                 expected_columns=ec,
mypytest_1  |                 ignored_columns=[],
mypytest_1  |                 value_rules=vr)
mypytest_1  | E           AssertionError: "only\ list\-like\ objects\ are\ allowed\ to\ be\ passed\ to\ isin\(\),\ you\ passed\ a\ \[str\]" does not match "only list-like objects are allowed to be passed to isin(), you passed a `str`"
Verkürzt ausgedrückt: Diese beiden Strings sind inhaltilch eigentlich korrekt, aber aus irgendeinem Grund werden die Leerzeichen escaped. Ohne Container läuft das problemlos.

Code: Alles auswählen

"only\ list\-like\ objects\ are\ allowed\ to\ be\ passed\ to\ isin\(\),\ you\ passed\ a\ \[str\]"
"only list-like objects are allowed to be passed to isin(), you passed a `str`"
Ist das Konvertieren von Leerzeichen in eine Escacpe-Sequenz nicht Standard in der Python-Funktion re.escape?
Jedenfalls verhält sich python3 in Debian 12 so:

Code: Alles auswählen

$ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.escape('Aha plus+')
'Aha\\ plus\\+'
>>> 
Begründung, z.B.: https://stackoverflow.com/questions/324 ... apes-space
Zotac ZBox ID91: Debian 12 mit GNOME
Geekom Mini IT11: Fedora 38 Silverblue (GNOME)

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von buhtz » 11.09.2023 21:02:25

Zum Python-Problem: Es lag an zwei unterschiedlichen Pandas Versionen und nicht an Docker oder Python-Versionen. Details in diesem Beitrag auf der LPUG-Mailingliste (leider nur mit subscription sichtbar).

Nochmal zurück zum eigentlichen Thema.

Könnte ich anstatt den Folder mit dem Python Code zu mounten, diesen auch direkt beim Bauen des Containers schon in diesen hinein kopieren? Dazu kenne ich COPY und ADD. Aber es scheint nicht trivial zu sein eine ganze Ordnerstruktur einzubauen (mit nur einem Befehl). Die meisten HowTo's zeigen nur Minibeispiele mit einer einzigen Python Datei.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [Erledigt] Docker: Eigenen Python Code testen

Beitrag von heisenberg » 11.09.2023 21:53:09

buhtz hat geschrieben: ↑ zum Beitrag ↑
11.09.2023 21:02:25
Könnte ich anstatt den Folder mit dem Python Code zu mounten, diesen auch direkt beim Bauen des Containers schon in diesen hinein kopieren? Dazu kenne ich COPY und ADD. Aber es scheint nicht trivial zu sein eine ganze Ordnerstruktur einzubauen (mit nur einem Befehl). Die meisten HowTo's zeigen nur Minibeispiele mit einer einzigen Python Datei.
Ja. COPY geht dafür.

Code: Alles auswählen

COPY ./quelle /ziel
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Antworten