652

I am trying to get a Python script to run on the linux server I'm connected to via ssh. The script uses mysqldb. I have all the other components I need, but when I try to install mySQLdb via setuptools like so:,

python setup.py install 

I get the following error report related to the mysql_config command.

sh: mysql_config: command not found Traceback (most recent call last): File "setup.py", line 15, in <module> metadata, options = get_config() File "/usr/lib/python2.5/MySQL-python-1.2.3/setup_posix.py", line 43, in get_config libs = mysql_config("libs_r") File "/usr/lib/python2.5/MySQL-python-1.2.3/setup_posix.py", line 24, in mysql_config raise EnvironmentError("%s not found" % (mysql_config.path,)) EnvironmentError: mysql_config not found 

Has anyone else encountered this error and if so how did you resolve it/what can I do to successfully install mysqldb?

6
  • 1
    Hi @user904542 - I've edited your question to hopefully make it a little more concise and get you some answers :) If you don't like it, or want to provide additional details, there's an edit link directly under your question which you can use to either roll back to your original, or add to the changes I've made.
    – user257111
    CommentedSep 19, 2011 at 22:36
  • 4
    I ran into the exact same problem, because i installed mysql from source. if you do too, just run something like this to make mysql_config available: sudo ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config or add /usr/local/mysql/bin/ to your path.CommentedFeb 10, 2012 at 21:48
  • If you have already installed mysql, the above comment by Thi Duong Nguyen solves the problem by creating a symlink to the mysql_config file in the /usr/bin directory, which is in the path that python will search.CommentedJan 31, 2013 at 22:04
  • 3
    just do this-------------apt-get install python-mysqldb
    – ns15
    CommentedJan 10, 2017 at 12:06
  • @AlexBoschmans symlinking /usr/bin is wrong, it is usr/local/my... see Thi's answer.
    – Timo
    CommentedMar 1, 2018 at 20:53

36 Answers 36

937

mySQLdb is a python interface for mysql, but it is not mysql itself. And apparently mySQLdb needs the command 'mysql_config', so you need to install that first.

Can you confirm that you did or did not install mysql itself, by running "mysql" from the shell? That should give you a response other than "mysql: command not found".

Which linux distribution are you using? Mysql is pre-packaged for most linux distributions. For example, for debian / ubuntu, installing mysql is as easy as

sudo apt-get install mysql-server 

mysql-config is in a different package, which can be installed from (again, assuming debian / ubuntu):

sudo apt-get install libmysqlclient-dev 

if you are using mariadb, the drop in replacement for mysql, then run

sudo apt-get install libmariadbclient-dev 

Reference: https://github.com/JudgeGirl/Judge-sender/issues/4#issuecomment-186542797

15
  • 1
    Reading package lists...Done Building dependency tree Reading state information...Done Note, selecting libmysqlclient15-dev instead of libmysqlclient-dev Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: libmysqlclient15-dev: Depends: zlib1g-dev but it is not going to be installed E: Broken packagesCommentedSep 19, 2011 at 18:32
  • 3
    Should 'sudo apt-get install mysql' be 'sudo apt-get install mysql-server'?
    – Kohanz
    CommentedApr 28, 2015 at 14:01
  • 10
    Note that for Debian it's sudo apt-get install mysql-server and sudo apt-get install mysql-clientCommentedApr 12, 2016 at 20:54
  • 11
    Can we finally admit that 'pip' is a colossal failure? Errors like this are such a pain, and they seem to happen with the majority of packages. Python badly needs a new solution to package management.CommentedSep 14, 2017 at 22:30
  • 6
    For me on Debian it was libmysqlclient-dev. In fact I have installed both libmariadbclient-dev libmysqlclient-dev
    – mirek
    CommentedApr 24, 2019 at 20:24
231

I was installing python-mysql on Ubuntu 12.04 using

pip install mysql-python 

First I had the same problem:

Not Found "mysql_config" 

This worked for me

$ sudo apt-get install libmysqlclient-dev 

Then I had this problem:

... _mysql.c:29:20: error fatal: Python.h: No existe el archivo o el directorio compilaciĂłn terminada. error: command 'gcc' failed with exit status 1 

Then I tried with

apt-get install python-dev 

(If you're using python3, install python3-dev instead.)

And then I was happy :)

pip install mysql-python Installing collected packages: mysql-python Running setup.py install for mysql-python building '_mysql' extension gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,4,'beta',4) -D__version__=1.2.4b4 -I/usr/include/mysql -I/usr/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -g In file included from _mysql.c:44:0: /usr/include/mysql/my_config.h:422:0: aviso: se redefiniĂł "HAVE_WCSCOLL" [activado por defecto] /usr/include/python2.7/pyconfig.h:890:0: nota: esta es la ubicaciĂłn de la definiciĂłn previa gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib/x86_64-linux-gnu -lmysqlclient_r -lpthread -lz -lm -lrt -ldl -o build/lib.linux-x86_64-2.7/_mysql.so Successfully installed mysql-python Cleaning up... 
5
  • 1
    Works too on openSUSE, where "libmysqlclient-dev" becomes "libmysqlclient-devel". Now the pip package installs fine. Thanks.
    – pbarill
    CommentedNov 30, 2013 at 4:14
  • installing python dev headers solved the missing Python.h error. Thanks.CommentedMay 19, 2016 at 22:58
  • 8
    if use python3.x, tried with apt-get install python3-dev.CommentedSep 29, 2016 at 1:59
  • This didn't work for me on 14.04 - "E: Package 'python-dev' has no installation candidate"CommentedSep 21, 2017 at 2:00
  • This is a good answer, but it is outdated and should be updated. In newer versions of Debian-based Linux apt command will be: sudo apt-get install default-libmysqlclient-dev python3-dev
    – rzlvmp
    CommentedJun 17, 2022 at 3:29
88

(Specific to Mac OS X)

I have tried a lot of things, but these set of commands finally worked for me.

  1. Install mysql
    brew install mysql 
  2. brew unlink mysql
  3. brew install mysql-connector-c
  4. Add the mysql bin folder to PATH
    export PATH=/usr/local/Cellar/mysql/8.0.11/bin:$PATH 
  5. mkdir /usr/local/Cellar/lib/
  6. Create a symlink
    sudo ln -s /usr/local/Cellar/mysql/8.0.11/lib/libmysqlclient.21.dylib /usr/local/Cellar/lib/libmysqlclient.21.dylib 
  7. brew reinstall openssl (source)
  8. Finally, install mysql-client
    LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/ pip install mysqlclient 

Update: In case this doesn't work, @vinyll suggests to run brew link mysql before step 8.

11
  • For Step 4, use brew info mysql to get the actual/correct path to the mysql installation. Then to make the PATH change persist, do the export PATH.. in your ~/.bash_profile.CommentedDec 26, 2019 at 1:21
  • step 1-4 with brew link --overwrite mysql-connector-c works on my Mac
    – Hunger
    CommentedFeb 12, 2020 at 3:59
  • 16
    I had to do a brew link mysql before step 8 to get it running.
    – vinyll
    CommentedMar 10, 2020 at 22:03
  • 2
    I added these to my .bashrc: export CPPFLAGS="-I/usr/local/opt/[email protected]/include"export LDFLAGS="-L/usr/local/opt/[email protected]/lib", and only ran brew install mysql, and it worked. Also fixes all future executions of pip to make sure they use the right ssl libs.CommentedOct 3, 2020 at 2:54
  • 9
    it was enough for me to just do brew install mysqlCommentedApr 8, 2021 at 11:20
54

On Red Hat I had to do

sudo yum install mysql-devel gcc gcc-devel python-devel sudo easy_install mysql-python 

Then it worked.

5
  • 4
    Worked for me on CentOS 7: yum install MySQL-python
    – hudolejev
    CommentedMay 3, 2016 at 8:22
  • 2
    If you need to install MySQL-python as a Python package, or are using virtualenv, this might help: yum install mysql-devel; venv/bin/pip install MySQL-python.
    – hudolejev
    CommentedMay 3, 2016 at 8:24
  • 2
    If you use MariaDB on CentOS 7, run sudo yum install mariadb-devel first, then you can install mysqlclient by pip install mysqlclient
    – Belter
    CommentedDec 21, 2017 at 2:25
  • where did you get gcc-devel rpm from?
    – Fayaz
    CommentedFeb 3, 2020 at 12:48
  • yum install mysql-devel Centos 8CommentedMay 13, 2020 at 23:08
46

On python 3.5.2 + any future version

sudo apt-get install libmysqlclient-dev python-dev

2
  • 1
    Also the mariadb package worked like a charm : libmariadb-dev.CommentedJan 3, 2022 at 16:35
  • Perhaps note that apt-get is specific to Debian and derived Linux distros like Ubuntu, Mint, etc. This seems to duplicate earlier answers with more details and background.
    – tripleee
    CommentedMar 16, 2023 at 6:56
37

The below worked for me on Ubuntu 12.04 LTS:

apt-get install libmysqlclient-dev python-dev 

All though it worked, i still went ahead to do the below:

export PATH=$PATH:/usr/local/mysql/bin/ 
    28

    I got the same error while trying to install mysql-python.

    This is how I fixed it.

    sudo PATH=/usr/local/mysql/bin/:$PATH pip install mysql-python 

    The problem was that the installer could not find the mysql_config in the default path. Now it can ..and it worked..

     15 warnings generated. clang -bundle -undefined dynamic_lookup -Wl,-F. build/temp.macosx-10.8-intel-2.7/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lz -lm -lmygcc -o build/lib.macosx-10.8-intel-2.7/_mysql.so -arch x86_64 Successfully installed mysql-python Cleaning up... 

    Hope this helps.

    Thanks.

    1
    • I was having the same issue installing MySQL locally on a Mac running OSX 10.9.4 (Mavericks). This solution worked for me as well.
      – Deepend
      CommentedAug 14, 2014 at 13:13
    25

    I fixed this problem with the following steps:

    sudo apt-get install libmysqlclient-dev sudo apt-get install python-dev sudo python setup.py install 
    1
    • 2
      When running >= Debian Stretch make sure to install default-libmysqlclient-dev, since the regular libmysqlclient-dev package has no installation candidate.
      – Bono
      CommentedJun 5, 2019 at 13:05
    21

    The commands (mysql too) mPATH might be missing.

    export PATH=$PATH:/usr/local/mysql/bin/

    0
      20

      Step1:-Install Python3 & Python3-dev Both

      sudo apt-get install python3 python3-dev 

      Step2:- Install Python & Mysql Connector

      sudo apt-get install libmysqlclient-dev 

      step3:- Install python mysql client

      sudo apt-get install mysqlclient 

      This will Solve your Problem

      2
      • Step 2 fixed this for me.CommentedOct 4, 2019 at 1:18
      • This has fixed my issue which had bugged me for 3 hours.. Thank you so much!!!
        – Olahzzz
        CommentedNov 5, 2019 at 10:14
      20

      The package libmysqlclient-dev is deprecated, so use the below command to fix it.

      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

      sudo apt-get install default-libmysqlclient-dev 
        18

        I think the most convenient way to solve this problem in 2020 is using another python package. We don't need install any other binary software.

        Try this

        pip install mysql-connector-python

        and then

        import mysql.connector mydb = mysql.connector.connect( host="", user="", passwd="", database="" ) cursor = mydb.cursor( buffered=True) cursor.execute('show tables;') cursor.execute('insert into test values (null, "a",10)') mydb.commit() mydb.disconnect()

        1
        15

        If you're on macOS and already installed [email protected] via brew install:

        1. brew install mysql-connector-c
        2. brew unlink [email protected]
        3. brew link --overwrite --dry-run [email protected] first, to see what symlinks are getting overwritten
        4. brew link --overwrite --force [email protected] to actually overwrite mysql-related symlinks with [email protected]
        5. pip install mysqlclient
          12

          I fixed it by installing libmysqlclient:

          sudo apt-get install libmysqlclient16-dev 
            12

            In centos 7 this works for me :

            yum install mariadb-devel pip install mysqlclient 
            1
            10

            The MySQL-python package is using the mysql_config command to learn about the mysql configuration on your host. Your host does not have the mysql_config command.

            The MySQL development libraries package (MySQL-devel-xxx) from dev.mysql.com provides this command and the libraries needed by the MySQL-python package. The MySQL-devel packages are found in the download - community server area. The MySQL development library package names start with MySQL-devel and vary based MySQL version and linux platform (e.g. MySQL-devel-5.5.24-1.linux2.6.x86_64.rpm.)

            Note that you do not need to install mysql server.

              8

              For Alpine Linux:

              $ apk add mariadb-dev mariadb-client mariadb-libs

              MariaDB is a drop-in replacement for MySQL and became the new standard as of Alpine 3.2. See https://bugs.alpinelinux.org/issues/4264

              2
              • 1
                which makes my alpine image almost 500MiB, I came to alpine for a smaller image size
                – ospider
                CommentedJan 20, 2018 at 14:40
              • I also have to install python3-dev for the lib to build
                – ospider
                CommentedJan 20, 2018 at 14:49
              7

              On my Fedora 23 machine I had to run the following:

              sudo dnf install mysql-devel 
                6

                In CentOS 7 , the following things should be done:

                #step1:install mysql https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ #step2: sudo yum install mysql-devel 

                or

                sudo yum install mysql-community-devel 
                  6

                  also, i fetch the same problem enter image description here I fixed this problem with the following steps: First I run this command

                  sudo apt-get install libmysqlclient-dev 

                  then I install

                  pip install mysqlclient==2.1.0 

                  this is worked for me

                  1
                  4

                  I think, following lines can be executed on terminal

                   sudo ln -s /usr/local/zend/mysql/bin/mysql_config /usr/sbin/ 

                  This mysql_config directory is for zend server on MacOSx. You can do it for linux like following lines

                  sudo ln -s /usr/local/mysql/bin/mysql_config /usr/sbin/ 

                  This is default linux mysql directory.

                    4

                    I had this issues and solved if by adding a symlink to mysql_config.

                    I had installed mysql with homebrew and saw this in the output.

                    Error: The `brew link` step did not complete successfully 

                    Depending on how you got mysql it will be in different places. In my case /usr/local/Cellar/mysql
                    Once you know where it is you should be able to ma a symbolic link to where python is looking for it. /usr/local/mysql

                    This worked for me.

                    ln -s /usr/local/Cellar/mysql/<< VERSION >>/bin/mysql_config /usr/local/mysql/bin/mysql_config 
                      4

                      I had the same problem. I solved it by following this tutorial to install Python with python3-dev on Ubuntu 16.04:

                      sudo apt-get update sudo apt-get -y upgrade sudo apt-get install -y python3-pip sudo apt-get install build-essential libssl-dev libffi-dev python3-dev 

                      And now you can set up your virtual environment:

                      sudo apt-get install -y python3-venv pyvenv my_env source my_env/bin/activate 
                        3

                        You need to install the python-dev package:

                        sudo apt-get install python-dev 
                          2

                          sudo apt-get install python-mysqldb

                          Python 2.5? Sounds like you are using a very old version of Ubuntu Server (Hardy 8.04?) - please confirm which Linux version the server uses.

                          python-mysql search on ubuntu package database

                          Some additional info:

                          From the README of mysql-python -

                          Red Hat Linux .............

                          MySQL-python is pre-packaged in Red Hat Linux 7.x and newer. This includes Fedora Core and Red Hat Enterprise Linux. You can also build your own RPM packages as described above.

                          Debian GNU/Linux ................

                          Packaged as python-mysqldb_::

                          # apt-get install python-mysqldb 

                          Or use Synaptic.

                          .. _python-mysqldb: http://packages.debian.org/python-mysqldb

                          Ubuntu ......

                          Same as with Debian.

                          Footnote: If you really are using a server distribution older than Ubuntu 10.04 then you are out of official support, and should upgrade sooner rather than later.

                          2
                          2

                          This method is only for those who know that Mysql is installed but still mysql_config can't be find. This happens if python install can't find mysql_config in your system path, which mostly happens if you have done the installation via .dmg Mac Package or installed at some custom path. The easiest and documented way by MySqlDB is to change the site.cfg. Find the mysql_config which is probably in /usr/local/mysql/bin/ and change the variable namely mysql_config just like below and run the installation again. Don't forget to un-comment it by removing "#"

                          Change below line

                          "#mysql_config = /usr/local/bin/mysql_config"

                          to

                          "mysql_config = /usr/local/mysql/bin/mysql_config"

                          depending upon the path in your system.

                          By the way I used python install after changing the site.cfg

                          sudo /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python setup.py install

                            2

                            Just type:

                            $ sudo apt-get install python-dev $ venv/bin/pip install MySQL-python 

                            This will solve this problems.

                            1
                            • 4
                              If you get an error with mysql_config, istall this: sudo apt-get install libmysqlclient-devCommentedJun 22, 2015 at 21:58
                            2

                            So far, all solutions (Linux) require sudo or root rights to install . Here is a solution if you do not have root rights and without sudo. (no sudo apt install ...):

                            1. Download the .deb file of the libmysqlclient-dev, e.g. from this mirror
                            2. Navigate to the downloaded file and run dpkg -x libmysqlclient-dev_<version tag>.deb . This will extract a folder called usr.
                            3. Symlink ./usr/bin/mysql_config to somewhere that is found on your $PATH:

                              ln -s`pwd`/usr/bin/mysql_config FOLDER_IN_YOUR_PATH

                            4. It should now be able to find mysql_config

                            Tested on Ubuntu 18.04.

                            2
                            • Does this work in CentOS 7? Assuming I dont have root access or dpkg installed , how should I approach it ?
                              – Sohil
                              CommentedMar 6, 2019 at 3:22
                            • No need to be root as long as you are working in your own virtual environment
                              – BlackBear
                              CommentedJul 6, 2019 at 7:52
                            2

                            For macOS Mojave , additional configuration was required, for compilers to find openssl you may need to set:

                            export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" 
                              2

                              On MacOS (OS/X) Catalina, I found that I needed to do this:

                               export PATH=$PATH:/usr/local/bin/:/usr/local/mysql-5.7.16-osx10.11-x86_64/bin/ 

                              On my computer, the mysql command is in /usr/local/bin (from the standard MacOS installer, not "brew").

                                Start asking to get answers

                                Find the answer to your question by asking.

                                Ask question

                                Explore related questions

                                See similar questions with these tags.