有必要记录一下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, inmetadata, 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的文章。