代码之家  ›  专栏  ›  技术社区  ›  Saqib Ali

为什么这个docker构建在安装MySQL python时失败了?

  •  0
  • Saqib Ali  · 技术社区  · 5 年前

    这是我的档案:

    FROM python:2.7
    RUN apt-get update && apt-get -y upgrade
    #RUN apt-get install -y python-pip python-dev libmysqlclient-dev
    RUN pip install --upgrade pip
    RUN pip install MySQL-python==1.2.5
    

    当我构建它时,会得到以下错误:

    Step 4/4 : RUN pip install MySQL-python==1.2.5
     ---> Running in 60be606a8d3e
    DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
    Collecting MySQL-python==1.2.5
      Downloading https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip (108kB)
    Building wheels for collected packages: MySQL-python
      Building wheel for MySQL-python (setup.py): started
      Building wheel for MySQL-python (setup.py): finished with status 'error'
      ERROR: Command errored out with exit status 1:
       command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-IfSGpv/MySQL-python/setup.py'"'"'; __file__='"'"'/tmp/pip-install-IfSGpv/MySQL-python/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-oUG6qk --python-tag cp27
           cwd: /tmp/pip-install-IfSGpv/MySQL-python/
      Complete output (38 lines):
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-2.7
      copying _mysql_exceptions.py -> build/lib.linux-x86_64-2.7
      creating build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/converters.py -> build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/connections.py -> build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/cursors.py -> build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/release.py -> build/lib.linux-x86_64-2.7/MySQLdb
      copying MySQLdb/times.py -> build/lib.linux-x86_64-2.7/MySQLdb
      creating build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/CR.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/ER.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/REFRESH.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      copying MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
      running build_ext
      building '_mysql' extension
      creating build/temp.linux-x86_64-2.7
      gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,5,'final',1) -D__version__=1.2.5 -I/usr/include/mariadb -I/usr/include/mariadb/mysql -I/usr/local/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o
      In file included from _mysql.c:44:
      /usr/include/mariadb/my_config.h:3:2: warning: #warning This file should not be included by clients, include only <mysql.h> [-Wcpp]
       #warning This file should not be included by clients, include only <mysql.h>
        ^~~~~~~
      In file included from _mysql.c:46:
      /usr/include/mariadb/mysql.h:440:3: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
         MYSQL_CLIENT_PLUGIN_HEADER
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
      _mysql.c: In function ‘_mysql_ConnectionObject_ping’:
      _mysql.c:2005:41: error: ‘MYSQL’ {aka ‘struct st_mysql’} has no member named ‘reconnect’
        if ( reconnect != -1 ) self->connection.reconnect = reconnect;
                                               ^
      error: command 'gcc' failed with exit status 1
      ----------------------------------------
      ERROR: Failed building wheel for MySQL-python
      Running setup.py clean for MySQL-python
    Failed to build MySQL-python
    Installing collected packages: MySQL-python
      Running setup.py install for MySQL-python: started
        Running setup.py install for MySQL-python: finished with status 'error'
        ERROR: Command errored out with exit status 1:
         command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-IfSGpv/MySQL-python/setup.py'"'"'; __file__='"'"'/tmp/pip-install-IfSGpv/MySQL-python/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-Kpgfk8/install-record.txt --single-version-externally-managed --compile
             cwd: /tmp/pip-install-IfSGpv/MySQL-python/
        Complete output (38 lines):
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-x86_64-2.7
        copying _mysql_exceptions.py -> build/lib.linux-x86_64-2.7
        creating build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/converters.py -> build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/connections.py -> build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/cursors.py -> build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/release.py -> build/lib.linux-x86_64-2.7/MySQLdb
        copying MySQLdb/times.py -> build/lib.linux-x86_64-2.7/MySQLdb
        creating build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/CR.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/ER.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/REFRESH.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        copying MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-2.7/MySQLdb/constants
        running build_ext
        building '_mysql' extension
        creating build/temp.linux-x86_64-2.7
        gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,5,'final',1) -D__version__=1.2.5 -I/usr/include/mariadb -I/usr/include/mariadb/mysql -I/usr/local/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o
        In file included from _mysql.c:44:
        /usr/include/mariadb/my_config.h:3:2: warning: #warning This file should not be included by clients, include only <mysql.h> [-Wcpp]
         #warning This file should not be included by clients, include only <mysql.h>
          ^~~~~~~
        In file included from _mysql.c:46:
        /usr/include/mariadb/mysql.h:440:3: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
           MYSQL_CLIENT_PLUGIN_HEADER
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
        _mysql.c: In function ‘_mysql_ConnectionObject_ping’:
        _mysql.c:2005:41: error: ‘MYSQL’ {aka ‘struct st_mysql’} has no member named ‘reconnect’
          if ( reconnect != -1 ) self->connection.reconnect = reconnect;
                                                 ^
        error: command 'gcc' failed with exit status 1
        ----------------------------------------
    ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-IfSGpv/MySQL-python/setup.py'"'"'; __file__='"'"'/tmp/pip-install-IfSGpv/MySQL-python/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-Kpgfk8/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
    

    如果我取消注释行 #RUN apt-get install python-pip python-dev libmysqlclient-dev ,我得到以下错误:

    Step 3/5 : RUN apt-get install python-pip python-dev libmysqlclient-dev
     ---> Running in 5593492607c7
    Reading package lists...
    Building dependency tree...
    Reading state information...
    Package libmysqlclient-dev is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    However the following packages replace it:
      libmariadb-dev-compat libmariadb-dev
    
    E: Package 'libmysqlclient-dev' has no installation candidate
    

    然后更换 libmysqlclient-dev 具有 libmariadb-dev-compat libmariadb-dev 让我回到原来的错误。

    如何将MySQL python 1.2.5版安装到docker映像中??

    1 回复  |  直到 5 年前
        1
  •  1
  •   Dupinder Singh    5 年前

    根据DockerHub
    https://hub.docker.com/r/mikemanger/python27-mysql/ 这是创建自己的图像文件的方法

    FROM python:2.7.13
    ENV DEBIAN_FRONTEND noninteractive
    RUN apt-get update \
      && apt-get install -y mysql-server --no-install-recommends \
      && apt-get clean \
      && pip install PyMySQL \
      && pip install MySQL-python \
      && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
    

    可能会有帮助!

        2
  •  0
  •   theduxinlux    5 年前

    我也遇到过同样的问题,它涉及到一些MariaDB包正在使用,但它们与MySQL native并不完全相同。

    我仍然没有找到安装这个包的解决方案,但是我找到了一个可以满足我需要的解决方案,我在需求文件中将MySQL-python替换为MySQL-connector-python。

    或者直接安装在你的Dockerfile中;

    RUN pip install mysql-connector-python
    

    然后根据MySQL文档建立我的连接 https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html