让Python支持Mysql

2011-07-04T14:15:00

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了……

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »