Comment utiliser MySQLdb avec Python et Django dans OSX 10.6?


259

Il s'agit d'un problème très discuté pour les utilisateurs d'OSX 10.6, mais je n'ai pas pu trouver de solution qui fonctionne. Voici ma configuration:

Python 2.6.1 64 bits Django 1.2.1 MySQL 5.1.47 osx10.6 64 bits

Je crée un virtualenvwrapper avec --no-site-packages, puis installe Django. Lorsque j'active virtualenv et exécute python manage.py syncdb, j'obtiens cette erreur:

Traceback (most recent call last):
File "manage.py", line 11, in <module>
  execute_manager(settings)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
  utility.execute()
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
  self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/__init__.py", line 257, in fetch_command
  klass = load_command_class(app_name, subcommand)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/__init__.py", line 67, in load_command_class
  module = import_module('%s.management.commands.%s' % (app_name, name))
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
  __import__(name)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/commands/syncdb.py", line 7, in <module>
from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/core/management/sql.py", line 5, in <module>
from django.contrib.contenttypes import generic
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/contrib/contenttypes/generic.py", line 6, in <module>
  from django.db import connection
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/db/__init__.py", line 75, in <module>
  connection = connections[DEFAULT_DB_ALIAS]
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/db/utils.py", line 91, in __getitem__
  backend = load_backend(db['ENGINE'])
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/db/utils.py", line 32, in load_backend
  return import_module('.base', backend_name)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
  __import__(name)
File "/Users/joerobinson/.virtualenvs/dj_tut/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 14, in <module>
  raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

J'ai également installé l' adaptateur MySQL pour Python , mais en vain (peut-être que je l'ai mal installé?).

Quelqu'un a traité cela avant?


5
Ce problème est le résultat d'une installation incomplète / incorrecte de l'adaptateur MySQL pour Python. Plus précisément, j'ai dû modifier le chemin d'accès au fichier mysql_config pour pointer vers / usr / local / mysql / bin / mysql_config - discuté plus en détail dans cet article: dakrauth.com/blog/entry/…
Joe

il suffit de faire cela ---------- apt-get install python-mysqldb
shadow0359

pip install mysqltravaillé pour moi!
Ivan Carrasco Quiroz

Réponses:


330

J'ai eu la même erreur et je l'ai pip install MySQL-pythonrésolue pour moi.

Installations alternatives:

  • Si vous n'avez pas de pip, ça easy_install MySQL-pythondevrait marcher.
  • Si votre python est géré par un système de packaging, vous devrez peut-être utiliser ce système (par exemple sudo apt-get install ...)

Ci-dessous, Soli note que si vous recevez l'erreur suivante:

EnvironmentError: mysql_config not found

... alors vous avez un autre problème de dépendance système. La résolution de ce problème variera d'un système à l'autre, mais pour les systèmes dérivés de Debian:

sudo apt-get install python-mysqldb


2
oui, j'ai utilisé Synaptic Package Manager pour rechercher mysql-python et installer et cela a très bien fonctionné. Merci.
Tomasz Iniewicz

6
Sous Fedora 17: sudo yum install MySQL-python:)
g19fanatic

20
$ mysql_configLe programme 'mysql_config' n'est actuellement pas installé. Vous pouvez l'installer en t yping:sudo apt-get install libmysqlclient-dev
anders

1
devrait ajouter cette réponse au document officiel de
django

1
Je pense que je suis la personne unique avec cette erreur «La commande python setup.py egg_info a échoué avec le code d'erreur 1» après l'exécution «pip install MySQL-python»
RicardoGonzales

62

Sous Ubuntu, je devais faire:

sudo apt-get install python-mysqldb

8
Il exécute OS X, pas Ubuntu
Facundo Casco

8
De plus, cela ne le mettrait pas dans le virtualenv
Twirrim

58

Ajoutant à d'autres réponses, les éléments suivants m'ont aidé à terminer l'installation de mysql-python:

virtualenv, mysql-python, pip: quelqu'un sait comment?

Sur Ubuntu ...

apt-get install libmysqlclient-dev
apt-get install python-dev
pip install mysql-python

N'oubliez pas d'ajouter «sudo» au début des commandes si vous ne disposez pas des autorisations appropriées.


1
la clé est apt-get install python-dev. Je ne sais pas pourquoi j'installe une version de développement de python 2 ans plus tard, mais cela fonctionne à partir d'aujourd'hui en utilisant python 2.7.3. Seulement 3 heures perdues.
user798719

23

Essayez ceci les commandes ci-dessous. Ils travaillent pour moi:

brew install mysql-connector-c 
pip install MySQL-python

Cette méthode a résolu mon problème. Toutes les autres suggestions avant de me donner un message d'erreur deCommand "python setup.py egg_info" failed with error code 1 in /private/var/folders/r8/c_tscq492sn641w5vtvqcvkw0000gp/T/pip-build-JYY1du/MySQL-python
LearnAWK

2
Merci beaucoup, essayez tout ce qui précède. Aucun n'a travaillé sur OSX 10.11, attendez-vous à cela
Paullo

1
@LearnAWK cela ne fonctionne pas. J'obtiens toujours l'erreur La commande "python setup.py egg_info" a échoué avec le code d'erreur 1 dans / private / var / folder / 3m / 97mbsh5x2bnghhk55130bh_h0000gn / T / pip-build-FFU1vL / MySQL-python /
Stony

19

mysql_configdoit être sur le chemin. Sur Mac, faites

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

4
J'ai essayé ceci et j'obtiens toujours la même erreur: 'raise ImproperlyConfigured ("Erreur lors du chargement du module MySQLdb:% s"% e) django.core.exceptions.ImproperlyConfigured: Erreur lors du chargement du module MySQLdb: Aucun module nommé MySQLdb'
filistea

14
pip install mysql-python

a déclenché une erreur:

EnvironmentError: mysql_config introuvable

sudo apt-get install python-mysqldb

résolu le problème.


11

Comment je l'ai fait fonctionner:

virtualenv -p python3.5 env/test

Après avoir acheté mon env:

pip install pymysql
pip install django

Ensuite, j'ai exécuté le startproject et à l'intérieur du manage.py, j'ai ajouté ceci:

+ try:
+     import pymysql
+     pymysql.install_as_MySQLdb()
+ except:
+     pass

En outre, ces paramètres internes ont été mis à jour:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'foobar_db',
        'USER': 'foobaruser',
        'PASSWORD': 'foobarpwd',
    }
}

J'ai également configparser==3.5.0installé dans mon virtualenv, je ne sais pas si cela était nécessaire ou non ...

J'espère que ça aide,


8

Les éléments suivants ont parfaitement fonctionné pour moi, exécutant Ubuntu 13.10 64 bits:

sudo apt-get install libmysqlclient-dev
sudo apt-get install python-dev

Maintenant, accédez à votre virtualenv (tel que le dossier env) et exécutez ce qui suit:

sudo ./bin/pip install mysql-python

J'ai trouvé la solution dans une question séparée et je la cite ci-dessous:

Si vous avez créé virtualenv avec le commutateur --no-site-packages (par défaut), les ajouts installés à l'échelle du système tels que MySQLdb ne sont pas inclus dans les packages d'environnement virtuel.

Vous devez installer MySQLdb avec la commande pip installée avec virtualenv. Vous pouvez soit activer virtualenv avec le script bin / activate, soit utiliser bin / pip depuis virtualenv pour installer également la bibliothèque MySQLdb localement.

Vous pouvez également créer un nouveau virtualenv avec les packages de site système inclus à l'aide du commutateur --system-site-package.

Je pense que cela devrait également fonctionner avec OSX. Le seul problème serait d'obtenir une commande équivalente pour l'installation libmysqlclient-devet python-devcomme ils sont nécessaires pour compiler, mysql-pythonje suppose.

J'espère que cela t'aides.


2
Merci! Vous devez installer MySQLdb avec la commande pip installée avec virtualenv. - Aide
dobs

Merci. sudo ./bin/pip install mysql-pythonest très utile!
theblackpearl

8

Essayez ceci: cela a résolu le problème pour moi.

pip installe MySQL-python


2
Merci. Cela a fonctionné pour résoudre le problème pour moi avec heroku et cleardb: ignite sur django 1.7.1.
Ryan Walton


7

sudo apt-get install python-mysqldb fonctionne parfaitement dans ubuntu

pip install mysql-pythondéclenche une erreur d'environnement


5

Cela a fonctionné pour Red Hat Enterprise Linux Server version 6.4

sudo yum install mysql-devel
sudo yum install python-devel
pip install mysql-python

CentOS 7, option 1 yum install MySQL-python:; L' option 2 (si l'on utilise virtualenv): yum install mysql-devel; venv/bin/pip install MySQL-python.
hudolejev

4

Vous pouvez installer en tant que pip install mysqlclient


cela l'a trié pour moi, car je pense que c'est la version à utiliser pour Python 3
A Star

3

J'ai effectué la mise à niveau vers OSX Mavericks et Pycharm 3 et j'ai commencé à obtenir cette erreur, j'ai utilisé pip et une installation facile et j'ai obtenu l'erreur:

la commande «/ usr / bin / clang» a échoué avec l'état de sortie 1.

J'ai donc besoin de mettre à jour vers Xcode 5 et j'ai essayé à nouveau d'installer en utilisant pip.

pip install mysql-python

Cela résout tous les problèmes.


2

L'erreur soulevée ici concerne l'importation du module python. Cela peut être résolu en ajoutant le dossier python site-packages à la variable d'environnement $ PYTHONPATH sous OS X. Nous pouvons donc ajouter la commande suivante au fichier .bash_profile:

export PYTHONPATH="$PYTHONPATH:/usr/local/lib/pythonx.x/site-packages/"

* remplacez xx par la version python que vous utilisez


J'ai essayé ceci: stackoverflow.com/questions/25459386/… mais j'ai échoué, cela m'a sauvé .. (Y)
Kamaldeep singh Bhatia

2

Si vous utilisez python3, essayez ceci (Mon OS est Ubuntu 16.04):

sudo apt-get install python3-mysqldb

2

pipn'a pas fonctionné pour moi sur le système Windows 8 64 bits. easy_install mysql-pythontravaille pour moi. Vous pouvez utiliser easy_installpour éviter de créer des binaires sur Windows si pip ne fonctionne pas.


1

J'ai eu le même problème sur OSX 10.6.6. Mais juste un simple easy_install mysql-pythonterminal n'a pas résolu le problème car un autre hoquet a suivi:

error: command 'gcc-4.2' failed with exit status 1.

Apparemment, ce problème survient après la mise à niveau de XCode3 (qui est nativement livré avec OSX 10.6) vers XCode4. Cette nouvelle version supprime la prise en charge de la construction de l'arc ppc. Si c'est le même cas, essayez de faire comme suit avanteasy_install mysql-python

sudo bash
export ARCHFLAGS='-arch i386 -arch x86_64'
rm -r build
python setup.py build
python setup.py install

Un grand merci à Ned Deily pour cette solution. Vérifiez ici


0

Pour moi, le problème a été résolu en réinstallant simplement mysql-python

pip uninstall mysql-python
pip install mysql-python


0

J'ai surmonté le même problème en installant la MySQL-pythonbibliothèque à l'aide de pip . Vous pouvez voir le message affiché sur ma console lorsque j'ai modifié mes paramètres de base de données pour la première fois dans settings.py et exécuté la commande makemigrations (la solution suit le message ci-dessous, voyez juste).

  (vir_env) admins-MacBook-Pro-3:src admin$ python manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 312, in execute
    django.setup()
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/local/Cellar/python/2.7.12_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/contrib/auth/models.py", line 41, in <module>
    class Permission(models.Model):
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/models/base.py", line 139, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/models/base.py", line 324, in add_to_class
    value.contribute_to_class(cls, name)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/models/options.py", line 250, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/__init__.py", line 36, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/utils.py", line 240, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/local/Cellar/python/2.7.12_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Users/admin/Desktop/SetUp1/vir_env/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 27, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Enfin, j'ai surmonté ce problème comme suit:

(vir_env) admins-MacBook-Pro-3:src admin$ pip install MySQLdb
Collecting MySQLdb
  Could not find a version that satisfies the requirement MySQLdb (from versions: )
No matching distribution found for MySQLdb
(vir_env) admins-MacBook-Pro-3:src admin$ pip install MySQL-python
Collecting MySQL-python
  Downloading MySQL-python-1.2.5.zip (108kB)
    100% |████████████████████████████████| 112kB 364kB/s 
Building wheels for collected packages: MySQL-python
  Running setup.py bdist_wheel for MySQL-python ... done
  Stored in directory: /Users/admin/Library/Caches/pip/wheels/38/a3/89/ec87e092cfb38450fc91a62562055231deb0049a029054dc62
Successfully built MySQL-python
Installing collected packages: MySQL-python
Successfully installed MySQL-python-1.2.5
(vir_env) admins-MacBook-Pro-3:src admin$ python manage.py makemigrations
No changes detected
(vir_env) admins-MacBook-Pro-3:src admin$ python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, rest_framework, messages, crispy_forms
  Apply all migrations: admin, contenttypes, sessions, auth, PyApp
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying PyApp.0001_initial... OK
  Applying PyApp.0002_auto_20170310_0936... OK
  Applying PyApp.0003_auto_20170310_0953... OK
  Applying PyApp.0004_auto_20170310_0954... OK
  Applying PyApp.0005_auto_20170311_0619... OK
  Applying PyApp.0006_auto_20170311_0622... OK
  Applying PyApp.0007_loraevksensor... OK
  Applying PyApp.0008_auto_20170315_0752... OK
  Applying PyApp.0009_auto_20170315_0753... OK
  Applying PyApp.0010_auto_20170315_0806... OK
  Applying PyApp.0011_auto_20170315_0814... OK
  Applying PyApp.0012_auto_20170315_0820... OK
  Applying PyApp.0013_auto_20170315_0822... OK
  Applying PyApp.0014_auto_20170315_0907... OK
  Applying PyApp.0015_auto_20170315_1041... OK
  Applying PyApp.0016_auto_20170315_1355... OK
  Applying PyApp.0017_auto_20170315_1401... OK
  Applying PyApp.0018_auto_20170331_1348... OK
  Applying PyApp.0019_auto_20170331_1349... OK
  Applying PyApp.0020_auto_20170331_1350... OK
  Applying PyApp.0021_auto_20170331_1458... OK
  Applying PyApp.0022_delete_postoffice... OK
  Applying PyApp.0023_posoffice... OK
  Applying PyApp.0024_auto_20170331_1504... OK
  Applying PyApp.0025_auto_20170331_1511... OK
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK
(vir_env) admins-MacBook-Pro-3:src admin$ 

0

Exécutez cette commande

sudo pip install mysql-python;

vous pouvez maintenant exécuter votre commande.

python manage.py startapp filename;

0

J'ai rencontré des situations similaires comme la vôtre que j'utilise python3.7 et django 2.1 dans virtualenv sur mac osx. Essayez d'exécuter la commande:

pip install mysql-python
pip install pymysql

Et modifiez le __init__.pyfichier dans votre dossier de projet et ajoutez ce qui suit:

import pymysql

pymysql.install_as_MySQLdb()

Exécutez ensuite: python3 manage.py runserver ou python manage.py runserver

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.