Seite 1 von 1

docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Sonntag 19. Dezember 2021, 17:45
von naheliegend
Wenn ich

Code: Alles auswählen

docker-compose build
ausführe, dann renne ich einen merkwürdigen Fehler:

#10 3.312 Collecting mysqlclient==2.0.3
#10 3.336 Downloading mysqlclient-2.0.3.tar.gz (88 kB)
#10 3.372 Preparing metadata (setup.py): started
#10 3.793 ERROR: Command errored out with exit status 1:
#10 3.793 command: /usr/local/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/setup.py'"'"'; __file__='"'"'/tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-6378qd7a
#10 3.793 cwd: /tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/
#10 3.793 Complete output (15 lines):
#10 3.793 mysql_config --version
#10 3.793 /bin/sh: mysql_config: not found
#10 3.793 mariadb_config --version
#10 3.793 /bin/sh: mariadb_config: not found
#10 3.793 mysql_config --libs
#10 3.793 /bin/sh: mysql_config: not found
#10 3.793 Traceback (most recent call last):
#10 3.793 File "<string>", line 1, in <module>
#10 3.793 File "/tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/setup.py", line 15, in <module>
#10 3.793 metadata, options = get_config()
#10 3.793 File "/tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/setup_posix.py", line 70, in get_config
#10 3.793 libs = mysql_config("libs")
#10 3.793 File "/tmp/pip-install-5a63iik2/mysqlclient_248acd81fe88472583af648ffac84773/setup_posix.py", line 31, in mysql_config
#10 3.793 raise OSError("{} not found".format(_mysql_config_path))
#10 3.793 OSError: mysql_config not found
#10 3.793 ----------------------------------------
#10 3.793 Preparing metadata (setup.py): finished with status 'error'
#10 3.793 WARNING: Discarding https://files.pythonhosted.org/packages ... 0f08a7c432 (from https://pypi.org/simple/mysqlclient/) (requires-python:>=3.5). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
#10 3.795 ERROR: Could not find a version that satisfies the requirement mysqlclient==2.0.3 (from versions: 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.3.8, 1.3.9, 1.3.10, 1.3.11rc1, 1.3.11, 1.3.12, 1.3.13, 1.3.14, 1.4.0rc1, 1.4.0rc2, 1.4.0rc3, 1.4.0, 1.4.1, 1.4.2, 1.4.2.post1, 1.4.3, 1.4.4, 1.4.5, 1.4.6, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.1.0rc1, 2.1.0)
#10 3.795 ERROR: No matching distribution found for mysqlclient==2.0.3
------
failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c pip install -r requirements.txt]: exit code: 1

Ich verstehe nicht, wo das Problem liegt. Ich habe doch Python 3.7.0.

Das Image basiert auf Python:3.7-alpine.

In meinem Dockerfile sieht es so aus:

Code: Alles auswählen

(...)
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Sonntag 19. Dezember 2021, 18:16
von __deets__
Das hat nichts mit der Python Version zu tun. Die passt doch. Zumindest bei mir ist 3.7 größer 3.5.

Aber das Kommando mysql_config fehlt eben. Ich vermute mal das steckt in einem MySQL dev Paket. Oder so.

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Montag 20. Dezember 2021, 07:35
von einfachTobi
Versuch mal, nur zum Test, ob es mit dem normalen Python Image funktioniert. Ich hatte auch mal das Problem, dass sich Drittbibliotheken partout nicht auf einem Alpine Image installieren lassen wollte. Mit etwas Arbeit hätte man es bestimmt anpassen können - ich bin dann einfach aufs normale Image gewechselt.

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Montag 20. Dezember 2021, 09:23
von __deets__
@einfachTobi: teilweise kann das an MUSL liegen, der alternativen libc, die alpine verwendet. Aber hier fehlt erstmal nur eine Voraussetzung zum Bau. Sobald der Compiler anspringt, kann es aber natürlich wieder eng werden.

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Montag 20. Dezember 2021, 11:42
von DasIch
Python wheels unterstützen musl erst seit recht kurzer Zeit, so kurz dass es noch nichtmal richtig dokumentiert ist. Die Konsequenz ist dass in vielen Fällen bei der Installation Dinge kompiliert werden müssen. Ich würde deswegen bei Python Anwendungen von Alpine momentan abraten.

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Montag 20. Dezember 2021, 11:52
von __deets__
@DasIch: warum ist das ein Problem, wenn die Kompilation durchgeht? Das Image ist dann doch gebaut. Den extra Zeitaufwand bemerkt der gelegentliche Nutzer doch nicht, oder? Man kann sonst ja auch die Images nochmal schneiden.

Re: docker-compose mysqlclient mit python:3.7-alpine - Fehler

Verfasst: Montag 20. Dezember 2021, 13:30
von DasIch
Erstmal ist es mit der Kompilierung gar nicht so einfach bei einigen Abhängigkeiten, gerade numpy oder auch bei einigen Sachen im ML Bereich ist es ein ziemlicher Akt dass zum laufen zu kriegen. Die Zeit die Kompilierung kostet merkt man auch durchaus wenn man CI/CD betreibt. Abgesehen davon nutzt man ja Alpine üblicherweise um ein kleines Image zu bekommen, wenn man aber die Toolchain zum kompilieren benötigt ist das Image dann alles andere als klein. Das kann man über multistage Builds zwar lösen, führt aber auch wieder zu mehr Komplexität.

Letztendlich muss man sich da dann die Frage stellen ob sich dies alles lohnt, ich denke dass dies nicht der Fall ist.