让Python支持Mysql
Python版本的差异对库的使用影响真的是非常的大,对应不同的工程文件需要的包不同,所以以后一个应该尽量每个项目和依赖的包都单独隔开。
今天在给Python安装Mysql支持时使用源码安装,结果出现了如下的错误提示:
python setup.py build
Traceback (most recent call last):
File "setup.py", line 15, in <module>
metadata, options = get_config()
File "D:\tddownload\Software\MySQL-python-1.2.3\setup_windows.py", line 7, in
get_config
serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_ke
y'])
WindowsError: [Error 2]
Google出了一个差不多的情况http://www.fuyun.org/2009/12/install-mysql-for-python-on-windows/,人家是版本不对导致的问题,而我这里因为使用的是PHPnow的套件所以他提供的解决方法无效。
据说解决此问题的另一个方法是使用了exe的已编译版本,http://stackoverflow.com/questions/645943/mysql-for-python-in-windows,下载安装之后发现又来的新的问题:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "MySQLdb\__init__.py", line 23, in <module>
(version_info, _mysql.version_info))
ImportError: this is MySQLdb version (1, 2, 3, 'final', 0), but _mysql is versio
n (1, 2, 2, 'final', 0)
问题出在安装的两个版本混淆了(1.2.3和1.2.2),将两个版本都删除干净后重新通过exe的已编译版本安装,终于可以导入了mysqldb模块,不过再次出现了新的问题:
E:\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the se
ts module is deprecated
from sets import ImmutableSet
解决办法:
找到Python26libsite-packagesMySQLdb下的__init__.py文件
1) 在文件中 "__init__", 注释掉:
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
新增:
class DBAPISet(frozenset):
2) 在文件中"converters.py", 注释掉 from sets import BaseSet, Set 这一句话。
3) 在文件中"converters.py", 修改 "Set" 成为 "set" ( 只有两个地方需要修改):
line 48: return Set([ i for i in s.split(',') if i ]) 改为 return set([ i for i in s.split(',') if i ])
line 129: Set: Set2Str 改为 set: Set2Str
原因大概是由于Python2.4版本中set不是内置的类型,要从sets导入,而到了现在常用的2.5和2.6中set已经是内置的所以会有出现相应的问题。
现在终于可以用mysqldb了……