解決Python使用pip安裝時遇到的解碼錯誤問題
阿新 • • 發佈:2019-01-01
我的OS是Windows,在使用python 3.6.2嘗試安裝pylint時,使用自動工具pip安裝遇到了一個錯誤:
命令列:
>pip install pylint
執行錯誤(省略了其他正常輸出):
Exception: Traceback (most recent call last): File "D:\Environment\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 0xa1 in position 43: invalid start byte During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\Environment\Python36\lib\site-packages\pip\basecommand.py", line 215, in main status = self.run(options, args) File "D:\Environment\Python36\lib\site-packages\pip\commands\install.py", line 342, in run prefix=options.prefix_path, File "D:\Environment\Python36\lib\site-packages\pip\req\req_set.py", line 784, in install **kwargs File "D:\Environment\Python36\lib\site-packages\pip\req\req_install.py", line 878, in install spinner=spinner, File "D:\Environment\Python36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess line = console_to_str(proc.stdout.readline()) File "D:\Environment\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 0xa1 in position 43: invalid start byte
這個問題其實很好解決,首先分析一下原因:
通常情況下,在windows裡,pip 命令都是通過 cmd 或者 powershell 來呼叫執行,而一般中文的windows系統的 cmd 和 powershell 環境使用的編碼格式預設為 GBK
,python 裡面預設使用 utf-8
來解碼,當然有可能遇到解碼錯誤。
解決方法就是利用 Traceback 資訊裡,找到 $PYTHONROOT/lib/site-packages/pip/compat/__init__.py
檔案,找到 75 行,return s.decode('utf_8')
也就是引發異常的程式碼處, 把 "utf-8"
替換成 "gbk"
如果不想每次遇到這個異常都進來改一次, 可以把這一行替換成一組 try...catch...
,如果 utf-8 解碼失敗,則自動呼叫 gbk 解碼。
以上