flask pip utf-8 編碼報錯處理

今天在公司裏安裝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吧。

相關文章
相關標籤/搜索