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?

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.


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 

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.


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.


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



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/


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

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

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

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.


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: // ....')


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/


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.