繁体   English   中英

在 docker 中使用 pip 安装 python mysqlclient 时出现错误“OSError:mysql_config not found”

[英]Error 'OSError: mysql_config not found' when installing python mysqlclient with pip in docker

这是docker-compose build的完整 output

$ docker-compose build
db uses an image, skipping
Building module1
Step 1/6 : FROM python:3.8.5-alpine
 ---> 44fceb565b2a
Step 2/6 : WORKDIR /usr/src/module1
 ---> Using cache
 ---> c1804c812bc9
Step 3/6 : COPY ./requirements.txt /usr/src/module1/requirements.txt
 ---> Using cache
 ---> 993eed44a4a2
Step 4/6 : RUN pip install -r requirements.txt
 ---> Running in d9a8746b6746
Collecting click==7.1.2
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Flask==1.1.2
  Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
Collecting Flask-Cors==3.0.8
  Downloading Flask_Cors-3.0.8-py2.py3-none-any.whl (14 kB)
Collecting Flask-SQLAlchemy==2.4.4
  Downloading Flask_SQLAlchemy-2.4.4-py2.py3-none-any.whl (17 kB)
Collecting itsdangerous==1.1.0
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Jinja2==2.11.2
  Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
Collecting MarkupSafe==1.1.1
  Downloading MarkupSafe-1.1.1.tar.gz (19 kB)
Collecting mysqlclient==2.0.1
  Downloading mysqlclient-2.0.1.tar.gz (87 kB)
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-1bev77us/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-1bev77us/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ebifvu4a
         cwd: /tmp/pip-install-1bev77us/mysqlclient/
    Complete output (12 lines):
    /bin/sh: mysql_config: not found
    /bin/sh: mariadb_config: not found
    /bin/sh: mysql_config: not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-1bev77us/mysqlclient/setup.py", line 15, in <module>
        metadata, options = get_config()
      File "/tmp/pip-install-1bev77us/mysqlclient/setup_posix.py", line 65, in get_config
        libs = mysql_config("libs")
      File "/tmp/pip-install-1bev77us/mysqlclient/setup_posix.py", line 31, in mysql_config
        raise OSError("{} not found".format(_mysql_config_path))
    OSError: mysql_config not found
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Service 'module1' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1

我的Dockerfile看起来像这样:

FROM python:3.8.5-alpine

WORKDIR /usr/src/module1
COPY ./requirements.txt /usr/src/module1/requirements.txt
RUN pip install -r requirements.txt
COPY . /usr/src/module1
CMD ["python", "app.py"]

我在 macOS 中使用mysql@5.7
我已经做了https://github.com/clips/pattern/issues/203
有人可以告诉我如何解决这个问题吗?

一些 python 软件包依赖于系统上安装的软件。
mysql 客户端就是其中之一。 因此,您需要在安装 python 软件包之前安装它。 当您使用 alpine 时,您可以通过添加RUN apk update && apk add mysql-client来做到这一点:

FROM python:3.8.5-alpine

WORKDIR /usr/src/module1
COPY ./requirements.txt /usr/src/module1/requirements.txt
RUN apk update && apk add mysql-client
RUN pip install -r requirements.txt
COPY . /usr/src/module1
CMD ["python", "app.py"]

虽然正如其他人所说,安装mysql-client可能会让你克服这个错误,但这只是你麻烦的开始。 接下来您会发现您需要编译 package,因此您需要安装编译器、开发库等。

The reason you will need to compile the package is that pre-compiled binary wheels on PyPI (which are indeed available for this package) don't work on Alpine Linux ( https://pythonspeed.com/articles/alpine-docker-python / )。

如果你从python:3.8.5-alpine的基础镜像切换到python:3.8.5-slim-buster ,你很可能根本不需要安装任何系统包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM