mysql-python安装的各种坑

有必要记录一下Virtualenv中,用PIP进行包安装遇到诸多问题及解决办法,否则以我健忘的性格,过后肯定又不记得自己是如何解决的了。以MySQL-python为例,但是与其他模块的错误应该也有共同之处的。

本人系统:Win7 64bit +python2.7+MySQL5.5+Virtualenv

问题1.各类找不到包的问题

仔细检查pip install package-name中package-name的包名是否输入有误。

问题2.

Traceback (most recent call last):
 File "setup.py", line 15, in 
 metadata, options = get_config()
 File "F:\python\virtualenv\test\build\MySQL-python-1.2.3\setup_windows.py", li
ne 7, in get_config
 serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_ke
y'])
WindowsError: [Error 2]

问题根源:Mysql-python无法找到所述版本的mysql。

解决办法:如果使用pip进行安装,则在virtualenv创造出的沙盒的目录下,build文件夹中找到mysql-python的安装包,然后找到安装包目录下的site.cfg文件,文件的最后一行中有mysql的版本,更改为自己的版本号即可。

问题3.

cannot find vcvarsall.bat

问题根源:缺少C++的编译器

解决办法1:安装Mingw32(Minimalist GNU For Windows)。这是此方法本人使用不成功,可能是因为我的是win7 64bit的原因,而我没有找到适合64位的编译器。32bit的应该是可以成功,详见文章:http://julabs.me/blog/python/unable-to-find-vcvarsall-bat/。

解决办法2:安装vs2008 express,这个是我推荐的办法,因为vs2008的express c++版本的不大,安装也很快,之后的很多python包都需要vs2008版本的c++编译器,因此,安装一下还是有必要的。下载地址。安装完毕后即可进行MySQL-python的安装了。

问题4.

_mysql.c(34) : Fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory

问题根源:Mysql5.5版本更新以后,config-win.h文件已经被移位了,被分离到了连接器(Connector)中,例如路径:C:\Program Files\MySQL\Connector C 6.0.2\include。因此,Mysql-python已经不能正确找到这个文件,因此安装失败。

解决办法:

1.首先更改包根目录下site.cfg文件,添加内容:

1 # Windows connector libs for MySQL.
2 connector = C:\Program Files\MySQL\Connector C 6.0.2

2.接着同样在根目录下更改文件setup_windows.py,找到如下内容:

1 include_dirs = [ os.path.join(mysql_root, r'include') ]:

并在其后添加:

1 include_dirs = [ os.path.join(options['connector'], r'include') ]

3.另外在:

1 library_dirs = [ os.path.join(mysql_root, r'lib\opt') ]

之后添加:

1 library_dirs = [ os.path.join(options['connector'], r'lib\opt') ]

4.最后的文件更改如下:

1 library_dirs = [ os.path.join(mysql_root, r'lib\opt') ]
2 library_dirs = [ os.path.join(options['connector'], r'lib\opt') ]
3 libraries = [ 'kernel32', 'advapi32', 'wsock32', client ]
4 include_dirs = [ os.path.join(mysql_root, r'include') ]
5 include_dirs = [ os.path.join(options['connector'], r'include') ]
6 extra_compile_args = [ '/Zl' ]

问题5.

各种连接错误例如LNK2019 无法解析的外部符号之类的。

问题原因:能力有限,未知。

解决办法:最最最无耻的解决办法,由于在Virtualenv下安装包确实会出现各种古里古怪的问题,因此,只有一个最终的绝招了。拿Mysql-python为例。Mysql-python的制作者估计知道windows下安装有多么的困难,因此,在Windows下有提供exe安装包,下载地址。下载完成后,安装。由于这个安装包只读取注册表下的Python安装目录,因此,安装目标是我们本机的Python环境,而不是Virtualenv的安装环境,怎么解决呢?其实很简单,安装完毕后,找到本机的Python安装目录下的包目录,以我本机为例:C:\Python27\Lib\site-packages。在这个目录下找到Mysql相关的文件及文件夹,一共有6个:

MySQL_python-1.2.3-py2.7.egg-info(文件夹)
MySQLdb(文件夹)
_mysql.pyd
_mysql_exceptions.py
_mysql_exceptions.pyc
_mysql_exceptions.pyo

将这些文件及文件夹复制到Virtualenv所创建的沙盒的Lib\site-packages文件夹下即可。这种方法在目前的使用中,我还没发现有什么问题。

最后贴一下参考网站以做备用:

Stackoverflow中关于config-win.h丢失的解决 。

VS2008 Express下载地址。

MySQL-python Windows安装程序。

vcvarsall.bat丢失的解决办法(mingw32)。

国外某Blog关于在Windows下安装Mysql-python的文章。

你可能感兴趣的:(mysql,python)