![](/img/trans.png)
[英]UnicodeDecodeError: 'utf8' codec can't decode byte “0xc3”
[英]pip UnicodeDecodeError: 'utf8' codec can't decode byte
我運行pip
,無論我傳遞給pip
什么標志,我總是收到以下錯誤:
$ pip --version
Traceback (most recent call last):
[...irrelevant details omitted...]
File "/usr/lib64/python2.7/codecs.py", line 314, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf6 in position 203: invalid start byte
這是怎么回事? 我該如何解決?
我安裝了 pip 版本 8.0.2。 更改或清除LANG
和LC_ALL
環境變量無濟於事。 我一定在這里閱讀了十幾個其他問題,但我正在努力尋找任何可以明確說明問題是什么或如何解決的問題。
pip
有問題。 如果任何已安裝的 Python 系統庫在庫描述中包含非 ASCII 字符,則它可能會崩潰。
錯誤消息的相關部分是這樣的:
UnicodeDecodeError: 'utf8' codec can't decode byte ...
特定的字節值並不重要。 崩潰是由存儲 Python 包的系統目錄中的.egg-info
文件中的某種非 ASCII 字符觸發的(例如, /usr/lib/python2.7/site-packages
)。 pip
嘗試解析所有這些文件,當它遇到某些非 ASCII 字符時,它會摔倒並死亡。
有兩種選擇:
正確的解決方法:將pip
更新到最新版本。 這修復了錯誤。
kludge:刪除觸發pip
崩潰的有問題的 Python 庫包。 這需要你弄清楚哪個 Python 庫包負責; 不幸的是, pip
並沒有給你太多的幫助來解決這個問題,所以你將不得不做一些調查來解決這個問題——請參閱下一節。
顯然,前一種選擇更可取……但如果由於某種原因您無法升級pip
,我將描述如何遵循第二種方法。
以下是如何檢查 Python 系統包並縮小可能導致pip
崩潰的原因。 我們將在 Python site-packages/
目錄中*.egg-info
任何具有非 ASCII 字符的*.egg-info
文件。 嘗試這個:
cd /usr/lib/python2.7/site-packages
LANG=ascii grep -P '[[:^ascii:]]' *.egg-info 2>/dev/null
(這需要 GNU grep。)查看它找到的匹配項。 檢查每個文件以查看它是否包含與錯誤消息匹配的非 ASCII 字符。
就我而言,提到的錯誤消息can't decode byte 0xf6
,因此我們將查找包含0xf6
字節的文件。 我們可以使用十六進制轉儲實用程序檢查每個匹配的文件; 我喜歡使用hexdump -C
。
要找到匹配項,您可能需要檢查 Python 包的其他位置,例如/usr/lib64/python2.7/site-packages
、 /usr/local/lib/python2.7/site-packages
等。
一旦找到導致問題的 Python 包,您可以嘗試刪除該庫(如果它不是必需的包)。
在較舊的系統上,如果您的當前路徑或用戶名包含任何非 ASCII 字符,也可能觸發此錯誤。
有些人報告說他們通過清除LC_ALL
和LANG
環境變量,或者將它們設置為不同的設置,例如export LC_ALL="en_US.UTF-8" LANG="en_US.UTF-8"
。 不過,這對我沒有幫助。
我發現有幫助的參考資料:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.