繁体   English   中英

无法在docker mysql容器中安装mysqlclient

Cannot install mysqlclient in a docker mysql container

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在由mysql优化的Docker映像( mysql/mysql-server )制作的Docker容器中安装mysqlclient时遇到一些问题。 该容器在Oracle Linux Sysrem(CentOS)上运行。

错误看起来像这样

Installing collected packages: mysqlclient, raven, redis, xmltodict, responses
  Running setup.py install for mysqlclient ... error
    Complete output from command /tracking_api/tracking/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-z_jafqw3/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-vqelrf7r/install-record.txt --single-version-externally-managed --compile --install-headers /tracking_api/tracking/include/site/python3.6/mysqlclient:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.6
    copying _mysql_exceptions.py -> build/lib.linux-x86_64-3.6
    creating build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/__init__.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/compat.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/connections.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/converters.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/cursors.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/release.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/times.py -> build/lib.linux-x86_64-3.6/MySQLdb
    creating build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/CR.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/ER.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/REFRESH.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    running build_ext
    building '_mysql' extension
    creating build/temp.linux-x86_64-3.6
    gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -Dversion_info=(1,3,12,'final',0) -D__version__=1.3.12 -I/usr/include/mysql -I/tracking_api/tracking/include -I/usr/include/python3.6m -c _mysql.c -o build/temp.linux-x86_64-3.6/_mysql.o -m64
    unable to execute 'gcc': No such file or directory
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/tracking_api/tracking/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-z_jafqw3/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-vqelrf7r/install-record.txt --single-version-externally-managed --compile --install-headers /tracking_api/tracking/include/site/python3.6/mysqlclient" failed with error code 1 in /tmp/pip-install-z_jafqw3/mysqlclient/

我注意到问题是由于容器中没有gcc而引起的。 安装完成后gccyum install gcc ,我收到另一个错误,看起来像这样

Installing collected packages: mysqlclient, raven, redis, xmltodict, responses
  Running setup.py install for mysqlclient ... error
    Complete output from command /tracking_api/tracking/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-90ek02_q/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-rdg1c3go/install-record.txt --single-version-externally-managed --compile --install-headers /tracking_api/tracking/include/site/python3.6/mysqlclient:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.6
    copying _mysql_exceptions.py -> build/lib.linux-x86_64-3.6
    creating build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/__init__.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/compat.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/connections.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/converters.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/cursors.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/release.py -> build/lib.linux-x86_64-3.6/MySQLdb
    copying MySQLdb/times.py -> build/lib.linux-x86_64-3.6/MySQLdb
    creating build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/CR.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/ER.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    copying MySQLdb/constants/REFRESH.py -> build/lib.linux-x86_64-3.6/MySQLdb/constants
    running build_ext
    building '_mysql' extension
    creating build/temp.linux-x86_64-3.6
    gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -Dversion_info=(1,3,12,'final',0) -D__version__=1.3.12 -I/usr/include/mysql -I/tracking_api/tracking/include -I/usr/include/python3.6m -c _mysql.c -o build/temp.linux-x86_64-3.6/_mysql.o -m64
    _mysql.c:29:19: fatal error: mysql.h: No such file or directory
     #include "mysql.h"
                       ^
    compilation terminated.
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/tracking_api/tracking/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-90ek02_q/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-rdg1c3go/install-record.txt --single-version-externally-managed --compile --install-headers /tracking_api/tracking/include/site/python3.6/mysqlclient" failed with error code 1 in /tmp/pip-install-90ek02_q/mysqlclient/

我意识到这是由于mysql.h不存在这一事实引起的。 我在此问题中发现,可以检查文件是否存在。 但是,似乎mysql文件夹在/use/local/目录中不存在。

这就是造成混乱的原因。 有人知道为什么会这样吗? 当docker镜像本身经过mysql优化时,为什么没有mysql.h文件? 提前致谢。

1 个回复

您需要安装mysql-community-develmysql.h在此软件包中。

注意:首先需要卸载mysql-community-server-minimal ,并在mysqlclient安装完成后重新安装它。 否则,您将遇到以下冲突:

事务检查错误:安装mysql-community-devel-8.0.13-1.el7.x86_64中的文件/ usr / bin / mysql_config与软件包mysql-community-server-minimal-8.0.13-1.el7中的文件冲突。 x86_64的

步骤如下:(省略pip安装)

yum remove -y mysql-community-server-minimal
yum install -y gcc
yum install -y mysql-community-devel
pip install mysqlclient
yum remove -y mysql-community-devel
yum install -y mysql-community-server-minimal

mysqlclient install的输出:

# pip install mysqlclient
Collecting mysqlclient
  Using cached https://files.pythonhosted.org/packages/ec/fd/83329b9d3e14f7344d1cb31f128e6dbba70c5975c9e57896815dbb1988ad/mysqlclient-1.3.13.tar.gz
Installing collected packages: mysqlclient
  Running setup.py install for mysqlclient ... done
Successfully installed mysqlclient-1.3.13
You are using pip version 8.1.2, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

最后,您的最后一个问题:

当docker镜像本身经过mysql优化时,为什么没有mysql.h文件

从dockerhub,您可以在这里找到mysql/mysqlserver dockerfile的链接:

FROM oraclelinux:7-slim

ARG MYSQL_SERVER_PACKAGE=mysql-community-server-minimal-8.0.13
ARG MYSQL_SHELL_PACKAGE=mysql-shell-8.0.13

# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release-el7.rpm \
      https://repo.mysql.com/mysql-community-release-el7.rpm \
  && yum-config-manager --enable mysql80-server-minimal \
  && yum install -y \
      $MYSQL_SERVER_PACKAGE \
      $MYSQL_SHELL_PACKAGE \
      libpwquality \
  && yum clean all \
  && mkdir /docker-entrypoint-initdb.d

VOLUME /var/lib/mysql

COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060
CMD ["mysqld"]

从上面可以看到,它仅使用预构建的mysql服务器软件包 ,没有编译mysql服务器的源代码,因此不需要mysql.h ,仅在进行源代码构建时使用。

但是,当您使用pip安装mysqlclient时,由于mysqlclient python软件包具有C extension依赖关系,因此它将必须使用gcc进行构建,然后它需要mysql.h ,这给您带来麻烦。 安装mysql.h ,一切正常。

2 无法在 Linux 中安装 mysqlclient

我有一个 Django 项目,我想将它部署在服务器上。 该项目包含一个 requirements.txt 文件。 上传到服务器后,除mysqlclient 包之外的所有包都已安装。 我尝试了不同的替代方案,但似乎找不到解决方案。 有没有办法在Linux中安装mysqlclient? 这是我的 re ...

3 在Docker中安装mysqlclient-python

我正在尝试使用Debian 8在docker中安装mysqlclient-python 但是当我运行python3 setup.py install 我得到错误: 我尝试安装各种软件包(openssl,crypto ++,libmysqlclient-dev,mysql-clie ...

4 无法在python virtualenv中安装mysqlclient

我正在尝试使用Django创建一个网站,并希望使用mySQL。 因此,在激活virtualenv的情况下,我使用以下命令: 此输入产生以下错误: 事情是将其安装在我的本地python版本上就像一个魅力,我只在virtualenv内部遇到此错误。 我正在使用python 3 ...

5 无法在docker容器中安装mysql-server

我想用MySQL配置一个容器,此后我将向该容器中添加一个Java应用程序。 但是,我无法在容器内安装MySQL服务器。 这是我的dockerfile: 我收到以下错误: 处理时遇到错误:/var/cache/apt/archives/mysql-server-5.5_5 ...

7 无法在 docker 容器中安装 mysql-client

我正在尝试运行一个入口点脚本,它等待 mysql 数据库准备就绪,就像这两个示例:示例 1和示例 2 正如预期的那样,它失败并显示消息“找不到 mysql”,因此在 Dockerfile 中我添加了这两行: 但我收到一条消息说:包'mysql-client'没有安装候选 所以我尝试使用defa ...

8 无法在docker容器上安装mysql-server

我正在使用docker的seneca微服务。 现在,当我尝试使用Dockerfile创建映像并尝试安装mysql-server时,它将挂起,如果我手动尝试在docker容器中安装mysql-server,则每次通过服务mysql start进行安装都会失败。 请帮忙。 ...

9 Docker容器上的Mysql安装

我试图运行mysql到修改后的ubuntu映像,其中包括使用下面的docker文件安装Node.js和基本的mysql安装 使用以下命令运行此服务器时 遇到以下错误 有人可以建议在这里需要更改的内容。 我想使用此容器与其他容器链接,该容器本质上运行我的node.js应用 ...

10 无法在python3 virtualenv中安装mysqlclient

我想用 MySQL 和 Python 3 运行 django。我用virtualenv --no-site-packages -p python3 ./初始化了虚拟环境。 然后我使用pip安装了django和wheel,所以pip freeze给出 然后我尝试使用pip install mysq ...

暂无
暂无

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

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