Unable to install MySQL-python

Anique Akhtar picture Anique Akhtar · Oct 21, 2012 · Viewed 30.3k times · Source

Okay I recently upgraded from Ubuntu 10.04 to 12.04

Only to be faced by a lot of problems. I am a newbie at this so you might have to tell me in a little more detail or step-by-step

I had a django project that was working perfectly but now it gives me this error :

  File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory

or in python :

>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.linux-i686/egg/MySQLdb/__init__.py", line 19, in <module>
  File "build/bdist.linux-i686/egg/_mysql.py", line 7, in <module>
  File "build/bdist.linux-i686/egg/_mysql.py", line 6, in __bootstrap__
ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory

Anyways I thought there was some problem with my MySQL-python so I tried re-installing it.

sudo pip install mysql-python

gives :

Downloading/unpacking mysql-python
  Running setup.py egg_info for package mysql-python
    The required version of distribute (>=0.6.28) is not available,
    and can't be installed while this script is running. Please
    install a more recent version first, using
    'easy_install -U distribute'.

    (Currently using distribute 0.6.24dev-r0 (/usr/lib/python2.7/dist-packages))
    Complete output from command python setup.py egg_info:
    The required version of distribute (>=0.6.28) is not available,

and can't be installed while this script is running. Please

install a more recent version first, using

'easy_install -U distribute'.



(Currently using distribute 0.6.24dev-r0 (/usr/lib/python2.7/dist-packages))

----------------------------------------
Command python setup.py egg_info failed with error code 2 in /tmp/pip-build/mysql-python
Storing complete log in /home/nabeel/.pip/pip.log

If I do :

sudo easy_install -U distribute

It gives this error :

Searching for distribute
Reading http://pypi.python.org/simple/distribute/
Reading http://packages.python.org/distribute
Best match: distribute 0.6.29
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.29.tar.gz#md5=1aad767bfca8bebaccafee25f85696cf
Processing distribute-0.6.29.tar.gz
Running distribute-0.6.29/setup.py -q bdist_egg --dist-dir /tmp/easy_install-K8ZuMX/distribute-0.6.29/egg-dist-tmp-Fj0gj_
Before install bootstrap.
Scanning installed packages
Setuptools installation detected at /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg
Egg installation
Patching...
Renaming /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg to /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg.OLD.1350776909.4
Patching complete.
Relaunching...
Traceback (most recent call last):
  File "/usr/local/bin/easy_install", line 9, in <module>
    load_entry_point('distribute==0.6.8', 'console_scripts', 'easy_install')()
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 1708, in main
    with_ei_usage(lambda:
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 1696, in with_ei_usage
    return f()
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 1712, in <lambda>
    distclass=DistributionWithoutHelpCommands, **kw
  File "/usr/local/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/local/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/local/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 236, in run
    self.easy_install(spec, not self.no_deps)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 471, in easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 501, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 680, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 957, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/command/easy_install.py", line 946, in run_setup
    run_setup(setup_script, args)
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/sandbox.py", line 29, in run_setup
    lambda: execfile(
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/sandbox.py", line 70, in run
    return func()
  File "/usr/local/lib/python2.7/site-packages/distribute-0.6.8-py2.7.egg/setuptools/sandbox.py", line 31, in <lambda>
    {'__file__':setup_script, '__name__':'__main__'}
  File "setup.py", line 131, in <module>
  File "/tmp/easy_install-K8ZuMX/distribute-0.6.29/distribute_setup.py", line 368, in _before_install
  File "/tmp/easy_install-K8ZuMX/distribute-0.6.29/distribute_setup.py", line 441, in _fake_setuptools
  File "/tmp/easy_install-K8ZuMX/distribute-0.6.29/distribute_setup.py", line 450, in _relaunch
NameError: global name '_cmd1' is not defined

Again now I have gone to this link : http://pypi.python.org/pypi/setuptools/0.6c11 to download and install setuptools.. I have also installed the latest distribute 0.6.8 from here : http://pypi.python.org/pypi/distribute/0.6.8

I have also tried uninstalling the previous versions and installing back but it doesn't seems to work. I have got Python 2.7.3 installed

Could someone please explain to me what is going on... How I can install Mysqldb...

I have also ran these commands on shell :

sudo apt-get install mysql-server mysql-client python-mysqldb libmysqlclient-dev python-dev

But it didn't help ...

UPDATE I JUST DID THIS AND GOT THIS ERROR :

nabeel@nabeel-pc:~$ pip uninstall setuptools
Uninstalling distribute:
  /usr/bin/easy_install
  /usr/bin/easy_install-2.7
  /usr/lib/python2.7/dist-packages/distribute-0.6.24dev_r0.egg-info
  /usr/lib/python2.7/dist-packages/easy_install.pyc
  /usr/lib/python2.7/dist-packages/pkg_resources.pyc
  /usr/lib/python2.7/dist-packages/setuptools
  /usr/lib/python2.7/dist-packages/site.pyc
  /usr/share/pyshared/easy_install.py
  /usr/share/pyshared/pkg_resources.py
  /usr/share/pyshared/site.py
Proceed (y/n)? y
  Successfully uninstalled distribute
nabeel@nabeel-pc:~$ sudo easy_install -U distribute
Searching for distribute
Reading http://pypi.python.org/simple/distribute/
Reading http://packages.python.org/distribute
Best match: distribute 0.6.29
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.29.tar.gz#md5=1aad767bfca8bebaccafee25f85696cf
Processing distribute-0.6.29.tar.gz
Running distribute-0.6.29/setup.py -q bdist_egg --dist-dir /tmp/easy_install-Xcer8d/distribute-0.6.29/egg-dist-tmp-K0E7gP
Before install bootstrap.
Scanning installed packages
Setuptools installation detected at /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg
Egg installation
Already patched.
After install bootstrap.
Creating /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info
Creating /usr/local/lib/python2.7/site-packages/setuptools.pth
Removing distribute 0.6.8 from easy-install.pth file
Adding distribute 0.6.29 to easy-install.pth file
Installing easy_install script to /usr/local/bin
Installing easy_install-2.7 script to /usr/local/bin

Installed /usr/local/lib/python2.7/site-packages/distribute-0.6.29-py2.7.egg
Processing dependencies for distribute
Finished processing dependencies for distribute
nabeel@nabeel-pc:~$ sudo pip install mysql-python
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

UPDATE 2 : I have managed to install virtualenv now in the environment I have also managed to install MySQLdb. Here's theh error I get while running my server :

sudo python manage.py syncdb

I get this error:

  File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory


(myenv)nabeel@nabeel-pc:~/workspace/gteam/metrics$ python
    Python 2.7.3 (default, Oct  6 2012, 21:57:36) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import MySQLdb
    >>> exit()

Answer

Robert Smith picture Robert Smith · Oct 21, 2012

Using virtualenv

First things first. Make sure you have Mysql, Setuptools and some essentials:

sudo apt-get install mysql-server
sudo apt-get install python-setuptools python-dev build-essential

Now install VirtualEnv:

sudo easy_install -U virtualenv 

Create a Virtual Environment. As the documentation says: virtualenv is a tool to create isolated Python environments. This means that the chances of getting a conflict are really small. Here "myenv" is the name of a folder where you can access your environment, so create it where you want.

virtualenv --distribute myenv

Then go to "myenv" directory and run this to activate it:

source myenv/bin/activate

You need to install libmysqlclient-dev to get MySQL-python working:

sudo apt-get install libmysqlclient-dev

Now you're ready to install MySQL-python:

pip install MySQL-python

and everything should be working.

When you don't want to work in that environment anymore, write in the terminal:

deactivate

UPDATE:

Since this answer keeps getting upvotes, let me show you how to do the same using conda, which has become my favorite environment nowadays. First you have to install anaconda (I believe you can also install miniconda, which is a lighter version that includes conda and some packages.) Here you will find the installer for Linux, OS X and Windows. It is a big file but contains a lot of pre-compiled packages ready to be installed. Assuming you already have installed anaconda, you can simply run:

conda create -n mysql-env python

mysql-env is the name of the environment (you can call it whatever you want) and python is the default version of python to be installed (currently, 2.7.10). Alternatively, install other version of python with conda create -n my-new-env python=3.4.

Then you activate your environment:

source activate mysql-env

and finally install mysql-python:

conda install MySQL-python

(I think conda install mysql-python also works)

And that's all.