flask pip utf-8 編碼報錯處理


今天在公司里安裝flask的時候,一切正常,可以正常import 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。

也不知道今天是吃錯葯了還是咋的,我竟然沒有立即放棄,按照nankaizhl的一些說明,改了以后發現沒有用,直接報錯了。

python3里面好像都沒有reload這個函數了。

難道我就只能在公司電腦里學python?

我只能硬着頭皮去啃報錯的traceback了。

我們仔細看下。

python先是在解決某個異常后,又發現了一個異常。有意思的是,另外一個異常,往回追溯,回到了同一個文件。

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個#的那一行。

這個語法是一個異常處理的,難怪會報錯來自同一個文件,這里很簡單的說明了如果不能正常編碼的話,就用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吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM