2015-07-23 24 views
7

Próbuję zaimportować moduł MySQL z pythonem, a dokładniej Flask, chociaż pojawia się błąd. Używam środowiska wirtualnego z moją aplikacją. Tutaj jest błąd:Błąd importowania pakietu MySQL dla Pythona

Traceback (most recent call last): 
    File "../myapp/application.py", line 9, in <module> 
    from flask.ext.mysql import MySQL 
    File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/flask/exthook.py", line 81, in load_module 
    reraise(exc_type, exc_value, tb.tb_next) 
    File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/flaskext/mysql.py", line 3, in <module> 
    import MySQLdb 
    File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module> 
    import _mysql 
ImportError: dlopen(/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /Library/Python/2.7/site-packages/_mysql.so 
    Referenced from: /Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/_mysql.so 
    Reason: image not found 

widzę w błędzie to mówi Library not loaded: /Library/Python/2.7/site-packages/_mysql.so. Ponieważ używam środowiska wirtualnego, którego ścieżka jest niepoprawna. Powinno to być /lib/python2.7/site-packages/_mysql.so.

Czy można to zmienić? Dzięki.

EDIT:

znalazłem tam terminal komenda na OSX, aby zmienić lokalizację Biblioteka:

sudo install_name_tool -change libmysqlclient.18.dylib /lib/python2.7/site-packages/MySQLdb/ 

choć po uderzeniu wprowadzić uzyskać to:

Usage: /Library/Developer/CommandLineTools/usr/bin/install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input 

I nie wydaje się, że wprowadzasz polecenie źle, jaki jest problem?

+1

Jak stworzyłeś virtualenv? Czy używa pakietów site_packages ('--system-site-packages' w nowej wersji virtualenv, włączonej domyślnie w starszej wersji), czy jest całkowicie izolowany? – yedpodtrzitko

+0

Tak, jest całkowicie odizolowany od systemu. –

+0

Brakuje ostatniego argumentu polecenia 'install_name_tool'. Twoje polecenie powinno brzmieć jak "install_name_tool -change old new input". –

Odpowiedz

2

Z reguły staraj się unikać instalacji pythona systemowego, podobnie jak zarazy. Tak, nawet opierając swoje virtualenvs na nim. Zbyt często będzie generować trudne do zrozumienia problemy.

Polecam coraz Homebrew, a następnie zainstalowaniu Python i MySQL dla nagłówków:

brew install python 
brew install mysql 

A potem opierając swoją virtualenv na pytona z wywaru:

virtualenv venv --python /usr/local/bin/python 

Wiem, że to trochę więcej obręcze przeskoczyć, ale znacznie ułatwi to proces rozwoju. Nie wspominając już o brew jest wielką pomocą dla dewelopera sam w sobie.

Właśnie sprawdziłem, czy działa, zajęło mi dwie minuty, aby uzyskać działający MySQLdb.

+0

Pracował fantastycznie i naprawił problem bez żadnych problemów, świetna odpowiedź. –