Windows下安裝mysql-python(MySQLdb)諾幹問題及解決方法

有必要記錄一下Virtualenv中,用PIP進行包安裝遇到諸多問題及解決辦法,不然以我健忘的性格,事後確定又不記得本身是如何解決的了。以MySQL-python爲例,可是與其餘模塊的錯誤應該也有共同之處的。python

本人系統:Win7 64bit +python2.7+MySQL5.5+Virtualenvmysql

問題1.各種找不到包的問題c++

仔細檢查pip install package-name中package-name的包名是否輸入有誤。sql

問題2.express

Traceback (most recent call last):
 File "setup.py", line 15, in <module>
 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。windows

解決辦法:若是使用pip進行安裝,則在virtualenv創造出的沙盒的目錄下,build文件夾中找到mysql-python的安裝包,而後找到安裝包目錄下的site.cfg文件,文件的最後一行中有mysql的版本,更改成本身的版本號便可。api

問題3.app

cannot find vcvarsall.bat

問題根源:缺乏C++的編譯器python2.7

解決辦法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的文章