有必要記錄一下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丟失的解決 。