今天在公司裏安裝flask的時候,一切正常,能夠正常import flaskpython
可是回到家裏,卻莫名其妙的報錯了。flask
Exception: Traceback (most recent call last): File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 33: invalid start byte During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\basecommand.py", line 216, in main status = self.run(options, args) File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\commands\install.py", line 342, in run prefix=options.prefix_path, File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_set.py", line 784, in install **kwargs File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_install.py", line 878, in install spinner=spinner, File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess line = console_to_str(proc.stdout.readline()) File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str return s.decode('utf_8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 33: invalid start byte
報錯大概是這樣的,總之我開始是沒怎麼看報錯信息,而後去百度查了一大堆。結果發現除了有一位csdn的博主:nankaizhl的報錯可能和我差很少,其餘就沒怎麼找到,包括stackoverflow。ruby
也不知道今天是吃錯藥了仍是咋的,我居然沒有當即放棄,按照nankaizhl的一些說明,改了之後發現沒有用,直接報錯了。app
python3裏面好像都沒有reload這個函數了。函數
難道我就只能在公司電腦裏學python?學習
我只能硬着頭皮去啃報錯的traceback了。編碼
咱們仔細看下。spa
python先是在解決某個異常後,又發現了一個異常。有意思的是,另一個異常,往回追溯,回到了同一個文件。.net
File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py"
沒辦法,只能帶着恐懼來看python安裝包裏的py代碼了。
但python解釋器頗有好的給出了報錯行數。
我把相關行截出來。
if sys.version_info >= (3,): def console_to_str(s): try: return s.decode(sys.__stdout__.encoding) # except UnicodeDecodeError: return s.decode('utf-8') #
報錯的2個#的那一行。code
這個語法是一個異常處理的,難怪會報錯來自同一個文件,這裏很簡單的說明了若是不能正常編碼的話,就用utf-8編碼。
而後看traceback裏的信息,代表,即便用utf-8編碼也不行,對於中國電腦來收,通常就是路徑裏面有中文。
雖然說咱們也能夠找一下哪些路徑有中文,但我沒這個水平。
很天然的一個修改的是,把這個改爲下面這樣,用gbk的中文編碼。
if sys.version_info >= (3,): def console_to_str(s): try: return s.decode(sys.__stdout__.encoding) except UnicodeDecodeError: return s.decode('gbk') #
未免改後有問題,我在後面加了一個#。
結果正常了。
補充一點還可能出問題的是,pip安裝flask報錯後,你再次pip install flask,會返回你安裝成功的信息。
好像也不是安裝成功,更準確的說法是沒有報錯,但這時你import flask會報錯,以下:
我這裏的報錯顯示的很清晰,沒有markupsafe._compat這個module。
因此我原本是想先pip uninstall flask,可是很遺憾,這樣並不能把MarkupSafe卸載掉。
你須要pip uninstall MarkupSafe才行,而後把上面的編碼改爲gbk後,再pip install flask。
這樣就沒問題了,而後咱們就一塊兒去學習flask吧。