Como instalar o MySQLdb (biblioteca de acesso a dados Python para MySQL) no Mac OS X?

99

Eu sou um novato em Python, mas acabei de passar um dia tentando descobrir como fazer o MySQLdb funcionar corretamente, e o universo de acordo com o google inclui inúmeras referências ao que é um PITA e um número excessivo de guias que parecem ser desatualizado. Visto que este site se destina a resolver esses tipos de problemas, e eu sei que vou precisar de uma referência para a solução no futuro, vou fazer a pergunta, fornecer minha resposta e ver o que mais flutua para o superfície.

Portanto, a questão é como fazer o MySQLdb funcionar no Mac OS X?

mblackwell8
fonte

Respostas:

133

Atualização para quem usa Python3: você pode simplesmente usar conda install mysqlclientpara instalar as bibliotecas necessárias para usar o MySQLdb como ele existe atualmente. A seguinte pergunta do SO foi uma pista útil: Python 3 ImportError: Nenhum módulo denominado 'ConfigParser' . Instalar mysqlclient irá instalar mysqlclient, mysql-connector e llvmdev (pelo menos, instalou essas 3 bibliotecas em minha máquina).

Aqui está o conto de minha experiência errante com esse problema. Adoraria vê-lo editado ou generalizado se você tiver uma melhor experiência do assunto ... aplique um pouco dessa TÃO mágica.

Observação: os comentários no próximo parágrafo se aplicam ao Snow Leopard, mas não ao Lion, que parece exigir MySQL de 64 bits

Em primeiro lugar, o autor (ainda?) De MySQLdb diz aqui que um dos problemas mais perniciosos é que o OS X vem instalado com uma versão de Python de 32 bits, mas a maioria dos joes comuns (inclusive eu) provavelmente pula para instalar a versão de 64 bits do MySQL. Má jogada ... remova a versão de 64 bits se você a instalou (as instruções sobre esta tarefa complicada estão disponíveis no SO aqui ), então baixe e instale a versão de 32 bits (pacote aqui )

Existem vários passos passo a passo sobre como construir e instalar as bibliotecas MySQLdb. Eles costumam ter diferenças sutis. Isso me pareceu o mais popular e forneceu a solução de trabalho. Eu o reproduzi com algumas edições abaixo

Etapa 0: antes de começar, suponho que você tenha MySQL, Python e GCC instalados no mac.

Etapa 1: Baixe o adaptador MySQL para Python mais recente no SourceForge.

Etapa 2: extraia o pacote baixado:

tar xzvf MySQL-python-1.2.2.tar.gz

Etapa 3: dentro da pasta, limpe o pacote:

sudo python setup.py clean

CASAL DE PASSOS EXTRA, ( deste comentário )

Etapa 3b: Remova tudo em seu diretório MySQL-python-1.2.2 / build / * - não confie no "python setup.py clean" para fazer isso por você

Etapa 3c: Remova o ovo em Usuários / $ USER / .python-eggs

Etapa 4: Originalmente necessário editar _mysql.c, mas agora NÃO É MAIS NECESSÁRIO. A comunidade MySQLdb parece ter corrigido esse bug agora.

Etapa 5: Crie um link simbólico em lib para apontar para um subdiretório chamado mysql. É aqui que ele procura durante a compilação.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Etapa 6: edite o setup_posix.py e altere o seguinte

mysql_config.path = "mysql_config"

para

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

Etapa 7: no mesmo diretório, reconstrua seu pacote (ignore os avisos que vêm com ele)

sudo python setup.py build

Etapa 8: Instale o pacote e pronto.

sudo python setup.py install

Etapa 9: teste se está funcionando. Funciona se você puder importar MySQLdb.

python

>>> import MySQLdb

Etapa 10: Se ao tentar importar você receber um erro reclamando que Library not loaded: libmysqlclient.18.dylibtermina com: Reason: image not foundvocê precisa criar um link simbólico adicional que é:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Você deve ser capaz de fazê-lo import MySQLdbsem erros.

Um último contratempo, porém, é que se você iniciar o Python a partir do diretório de compilação, obterá este erro:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Módulo _mysql já foi importado de /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, mas XXXX / MySQL-python-1.2.3c1 está sendo adicionado a sys.path

Isso é muito fácil para o Google, mas para evitar problemas, você acabará aqui (ou talvez não ... não é um URL especialmente preparado para o futuro) e descobrirá que precisa cd ..sair do diretório de construção e o erro deve desaparecer.

Como escrevi no início, adoraria ver essa resposta generalizada, pois existem inúmeras outras experiências específicas desse horrível problema por aí. Edite ou forneça sua própria resposta melhor.

mblackwell8
fonte
1
Observe que o Python fornecido pela Apple em 10.6 (Snow Leopard) prefere rodar 64 bits (é universal de 32 bits / 64 bits). Existem outras armadilhas também. Por um tempo, na série mysql 5.1.x, os tarballs do OS X empacotados pelo mysql estavam com defeito (alegavam ser universais, mas não eram). O adaptador de banco de dados para Python, MySQLdb, teve seus próprios problemas. Este é um caso em que é aconselhável apenas usar MacPorts para construir tudo o que você precisa automaticamente. É muito fácil que algo dê errado.
Ned Deily,
Vou deixar isso aqui para o caso de ajudar mais alguém. Eu também tive que modificar o site.cfg para definir o mysql_config para o caminho certo. Eu não acho que ele tinha um caminho inicialmente, então o padrão era / opt / ..., mas eu precisava apontá-lo para / usr / local / mysql / ...
tchaymore
8
Eu também tive que correr:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
Também estou executando o Lion e tive grandes problemas para fazer isso funcionar. Eu finalmente encontrei esta ótima pergunta e resposta do SO e a segui 100%. Não funcionou para mim até que eu adicionei, exatamente como David Underhill mencionado acima: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Depois de executar isso, importou conforme o esperado ... finalmente. Wheewwww. Apenas um fyi para quem está em uma posição semelhante.
John the King
2
Acontece que eu tinha bibliotecas mysql, mas apenas não vinculadas corretamente. O Mac OS ElCapitan não permite links em / usr / lib. Então, isso foi o suficiente para mim: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Uma maneira rápida e fácil para Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) e 10.11 (El Capitan):

Presumo que você tenha o XCode, suas ferramentas de linha de comando , Python e MySQL instalados.

  1. Instale o PIP:

    sudo easy_install pip
  2. Editar ~ / .profile: (pode não ser necessário no Mac OS X 10.10)

    nano ~/.profile

    Copie e cole as duas linhas a seguir

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

    Salvar e sair. Afterwords executa o seguinte comando:

    source  ~/.profile
  3. Instale MySQLdb

    sudo pip install MySQL-python

    Para testar se tudo funciona bem, tente

    python -c "import MySQLdb"

Funcionou como um encanto para mim. Espero que ajude.

Se você encontrar um erro relacionado a uma biblioteca ausente: Biblioteca não carregada: libmysqlclient.18.dylib, então você deve criar um link simbólico para /usr/lib:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekschas
fonte
2
Obrigado, esta solução também funciona no Mac OSX 10.9 :-)
matsoftware
2
Isso funcionou muito bem para mim (Yosemite público beta; Mysql 5; Py2.7), mas eu precisava fazer o sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibcomando de baixo.
Michael Scott Cuthbert de
Boa resposta. Eu já tinha outras definições de DYLD_LIBRARY_PATH em meu .bash_profile, então adicionei desta formaexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Acabei de verificar que isso funciona com 10.10.4. Além disso, usando o mysql do homebrew, a alteração do .profile não foi necessária para fazer este trabalho.
Isotopp
1
Depois de instalar o MySQL com brew install mysql, não precisei passar pela segunda etapa.
dav.garcia
36

Instale mysql e python via Macports Os portadores fizeram todo o trabalho difícil.

sudo port install py26-mysql 
sudo port install mysql5-server

deve instalar o que você precisa. (veja Stack overflow para comentários sobre o servidor mysql )

Se você só precisa se conectar ao mysql e não executar um servidor, a primeira linha é suficiente.

Macports agora (início de 2013) fornecerá downloads binários para combinações comuns de SO e arquitetura executável, para outros (e se você solicitar), ele será compilado a partir do código-fonte.

Em geral, macports (ou fink) ajudam quando há bibliotecas complexas etc. que precisam ser instaladas.

Somente código Python e se dependências simples de C podem ser configuradas por meio de ferramentas de configuração etc, mas começa a ficar complexo se você misturar os dois.

mmmmmm
fonte
3
Observe que, ao começar a usar MacPorts, certifique-se de que seu caminho prefira / opt / local / bin a / usr / bin, pois o MacPorts instala coisas em / opt / local.
Teemu Kurppa
4
Sim! E pule a segunda linha se você só precisa se conectar a um servidor MySQL existente. Infelizmente, com o número de dependências envolvidas, tentar usar python com mysql no OS X é um caso em que é mais fácil permitir que MacPorts instale uma instância python adicional em vez de tentar jogar você mesmo o gerenciador de pacotes.
Ned Deily
Como nota secundária, se você estiver recebendo um aviso de suspensão de
Jay Taylor
4
Para sua informação, se você apenas fizer a primeira linha (com py27-mysql pelo menos), ele vai acabar instalando o mysql5 de qualquer maneira. Baixando e compilando o código-fonte. Provavelmente não é o que você quer. Grr.
Ben Hardy
@BenHardy - fica tudo instalado, o que é o que você quer e exatamente o que eu quis dizer - também agora os executáveis ​​do Lion e do Snow Leopard são construídos centralmente por macports, então não farão uma compilação local na maioria dos casos.
mmmmmm
15

Instale o pip:

sudo easy_install pip

Instale a cerveja:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Instale o mysql:

brew install mysql

Instale MySQLdb

sudo pip install MySQL-python

Se você tiver problemas de compilação, tente editar o arquivo ~ / .profile como em uma das respostas aqui.

Ron Reiter
fonte
Obrigado! Isso funcionou no Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) O URL solicitado retornou o erro: 404 Não encontrado
Thirupathi Thangavel
fez isso, mas em pip install mysqlclientvez disso. Trabalho!
jeremysprofile
13

Aqui está outra etapa pela qual tive que passar, depois de receber um erro ao concluir a Etapa 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Referência: Obrigado! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
fonte
9

Conforme declarado em Instalação do MySQL-python no mac :

pip uninstall MySQL-python
brew install mysql
pip install MySQL-python

Em seguida, teste:

python -c "import MySQLdb"
Telmo Dias
fonte
4

Acabei de ter esse problema (de novo!) Depois de obter uma nova caixa Lion.

Melhor solução que encontrei (ainda não 100% ideal, mas funcionando):

você pode obtê-lo baixando XCode / Dev Tools da Apple - este é um grande download -

... mas, em vez disso, recomendo este github que tem o que você precisa (e não tem XCode): https://github.com/kennethreitz/osx-gcc-installer

Eu baixei seu PKG pré-construído para o lion, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • certifique-se de ter baixado uma versão de 64 bits da comunidade MYSQL. (A instalação do DMG é um caminho fácil) http://dev.mysql.com/downloads/mysql/

  • Defina os caminhos da seguinte forma:

    exportar PATH = $ PATH: / usr / local / mysql-XXXX

    exportar DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    exportar ARCHFLAGS = '- arch x86_64'

OBSERVE QUE:

1 no mysql-XXXX acima, XXX é a versão específica que você baixou. (Provavelmente / usr / local / mysql / também funcionaria, já que provavelmente é um apelido para o mesmo, mas não vou fingir que conheço sua configuração)

2 Eu vi sugerir que ARCHFLAGS seja definido como '-arch i386 -arch x86_64', mas especificar apenas x86_64 pareceu funcionar melhor para mim. (Posso pensar em algumas razões para isso, mas não são estritamente relevantes).

  • Instale a besta!

    easy_install MySQL-python

  • ÚLTIMO PASSO:

Adicione permanentemente o DYLD_LIBRARY_PATH!

Você pode adicioná-lo ao seu bash_profile ou similar. Essa era a etapa que faltava para mim, sem a qual meu sistema continuou a insistir em vários erros para localizar _mysql.so e assim por diante.

exportar DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@richard-boardman, acabei de notar sua solução de soft link, que pode na verdade estar fazendo a mesma coisa que minha solução PATH faz ... pessoal, o que funcionar melhor para vocês.

Melhor referência: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
fonte
4

Você pode tentar usar o pure-python pymysql:

sudo easy_install pymysql

(Ou use pipse você o tiver instalado.) Em seguida, adicione isso antes de você import MySQLdbem seu código:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Collin Anderson
fonte
3

Ou tente simplesmente:

> sudo easy_install MySQL-python

Se der um erro como abaixo:

EnvironmentError: mysql_config não encontrado

, então apenas execute este

> export PATH=$PATH:/usr/local/mysql/bin
Shashank Agarwal
fonte
0

Se você estiver usando MySQL de 64 bits, usar ARCHFLAGS para especificar sua arquitetura de cpu ao construir bibliotecas mysql-python resolverá o problema:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Shan Valleru
fonte
0
export PATH=$PATH:/usr/local/mysql/bin/

deve corrigir o problema para você, pois o sistema não consegue encontrar o arquivo mysql_config.

Varun Bhatia
fonte
0

Em macos Sierra, isso funciona para mim, onde python é gerenciado por anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

O para usar com SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (padrão, 20 de dezembro de 2016, 23:05:08) [GCC 4.2.1 compatível com Apple LLVM 6.0 (clang-600.0.57)] em darwin Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais em formação. O Anaconda é oferecido a você pela Continuum Analytics. Verifique: http://continuum.io/thanks e https://anaconda.org

>>> da importação sqlalchemy *

>>> dbengine = create_engine ('mysql: // ....')

sAguinaga
fonte
0

Esta resposta é uma atualização, cerca de novembro de 2019. Nenhuma das instalações populares do pip fornecerá uma configuração de trabalho no MacOS 10.13 (e provavelmente em outras versões também). Esta é uma maneira simples de fazer as coisas funcionarem:

brew install mysql
pip install mysqlclient

Se precisar de ajuda para instalar o brew, consulte este site: https://brew.sh/

comer comida
fonte
0

Corri para este problema e descobri que mysqlclientprecisa saber onde encontrar o openssl, e OSX esconde isso por padrão.

Localize o openssl com brew info openssle, em seguida, adicione o caminho do seu opensslcompartimento ao PATH:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Eu recomendo adicionar isso ao seu .zshrc ou .bashrc para que você não precise se preocupar com isso no futuro. Em seguida, com essa variável exportada (o que pode significar fechar e reabrir sua sessão bash), adicione mais duas variáveis ​​env:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Então, finalmente, execute:

pipenv install mysqlclient

e deve instalar perfeitamente.

Fonte: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Elliot Plant
fonte