为 Python 导入 MySQL 包时出错
Error importing MySQL package for Python
我正在尝试使用 python 导入 MySQL 模块,更具体地说是 Flask,但我收到了一个错误。我在我的应用程序中使用虚拟环境。这是错误:
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
我可以在错误中看到 Library not loaded: /Library/Python/2.7/site-packages/_mysql.so
。由于我使用的是路径不正确的虚拟环境。应该是 /lib/python2.7/site-packages/_mysql.so
.
有办法改变吗?谢谢。
编辑:
我发现 OSX 上有一个终端命令可以更改库位置:
sudo install_name_tool -change libmysqlclient.18.dylib /lib/python2.7/site-packages/MySQLdb/
虽然在按下回车键后我得到了这个:
Usage: /Library/Developer/CommandLineTools/usr/bin/install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input
我似乎没有输入错误的命令,这是什么问题?
作为一项规则,尽量避免像瘟疫一样安装系统 python。是的,甚至将你的 virtualenvs 基于它。它经常会产生难以理解的问题。
我建议获取 Homebrew,然后为 headers 安装 python 和 mysql:
brew install python
brew install mysql
然后将你的 virtualenv 基于来自 brew 的 python:
virtualenv venv --python /usr/local/bin/python
我知道,要跳过的环节有点多,但它会让您的开发过程变得容易得多。更不用说 brew
本身就是对开发人员的极大帮助。
我刚刚检查了它是否有效,我花了两分钟才得到一个正常工作的 MySQLdb。
我正在尝试使用 python 导入 MySQL 模块,更具体地说是 Flask,但我收到了一个错误。我在我的应用程序中使用虚拟环境。这是错误:
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
我可以在错误中看到 Library not loaded: /Library/Python/2.7/site-packages/_mysql.so
。由于我使用的是路径不正确的虚拟环境。应该是 /lib/python2.7/site-packages/_mysql.so
.
有办法改变吗?谢谢。
编辑:
我发现 OSX 上有一个终端命令可以更改库位置:
sudo install_name_tool -change libmysqlclient.18.dylib /lib/python2.7/site-packages/MySQLdb/
虽然在按下回车键后我得到了这个:
Usage: /Library/Developer/CommandLineTools/usr/bin/install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input
我似乎没有输入错误的命令,这是什么问题?
作为一项规则,尽量避免像瘟疫一样安装系统 python。是的,甚至将你的 virtualenvs 基于它。它经常会产生难以理解的问题。
我建议获取 Homebrew,然后为 headers 安装 python 和 mysql:
brew install python
brew install mysql
然后将你的 virtualenv 基于来自 brew 的 python:
virtualenv venv --python /usr/local/bin/python
我知道,要跳过的环节有点多,但它会让您的开发过程变得容易得多。更不用说 brew
本身就是对开发人员的极大帮助。
我刚刚检查了它是否有效,我花了两分钟才得到一个正常工作的 MySQLdb。