欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于pycharm 切換 python3.9 報錯 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的問題

 更新時間:2020年11月24日 08:45:47   作者:程序員的一天  
這篇文章主要介紹了pycharm 切換 python3.9 報錯 ‘HTMLParser‘ object has no attribute ‘unescape‘ 解決,需要的朋友可以參考下

有的bug,莫名其妙就好了…

python3.9 報錯 “AttributeError: 'HTMLParser' object has no attribute 'unescape'” 異常分析解決。

一、問題描述

安裝 python3.9 版本后,pycharm 中切換 python3.9 版本,創(chuàng)建虛擬環(huán)境報錯:"AttributeError: 'HTMLParser' object has no attribute 'unescape'"。

Executed command:
C:\Users\腳本之家\AppData\Local\Temp\tmp41_yhcxspycharm-management\setuptools-40.8.0\setup.py install

Error occurred:
AttributeError: 'HTMLParser' object has no attribute 'unescape'

Command output:
Traceback (most recent call last):
File "C:\Users\腳本之家\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setup.py", line 11, in <module>
import setuptools
File "C:\Users\腳本之家\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\__init__.py", line 20, in <module>
from setuptools.dist import Distribution, Feature
File "C:\Users\腳本之家\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\dist.py", line 35, in <module>
from setuptools.depends import Require
File "C:\Users\腳本之家\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\depends.py", line 7, in <module>
from .py33compat import Bytecode
File "C:\Users\腳本之家\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\py33compat.py", line 55, in <module>
unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
AttributeError: 'HTMLParser' object has no attribute 'unescape'

查看官網(wǎng) python3.9changelog,發(fā)現(xiàn) HTMLParser.unescape 屬性被移除了,并且從 python3.4 開始就被棄用。

python3.9 changelog

pycharm 創(chuàng)建虛擬環(huán)境時,會使用到 setuptools。而 setuptools 中,剛好使用了這個屬性,所以,導致了"AttributeError: 'HTMLParser' object has no attribute 'unescape'"異常。

經(jīng)過各種分析、嘗試,問題最終得到解決。記錄下過程,避免更多人踩坑。

二、解決方法

先給出解決方法,感興趣的朋友,可以繼續(xù)閱讀后面的分析部分。

解決這個問題,分兩種情況:

1. 不通過 pycharm 編輯器,直接使用 python 解釋器。
2. 在 pycharm 編輯器中使用 python 解釋器。

我是在 pycharm 中使用 python3.9 觸發(fā)報錯,所以這里也單獨提出來討論討論。

2.1、直接使用 python 解釋器

不通過 pycharm 編輯器,直接使用 python 解釋器。比如,在 windowscmd ,或 linux 下的命令行中使用 python。

解決方法:更新 setuptools 版本。
我以 python3.9 使用 setuptools 為例,測試如下。

2.1.1、setuptools 低版本觸發(fā)報錯

setuptools-40.8.0 為例,測試觸發(fā)報錯如下:

第一步,使用 python3.9 下的 pip 卸載之前安裝的 setuptools:

E:\soft\python\python39\install>pip uninstall setuptools

第二步,安裝 setuptools-40.8.0

E:\soft\python\python39\install>pip install setuptools==40.8.0
Collecting setuptools==40.8.0
 Using cached setuptools-40.8.0-py2.py3-none-any.whl (575 kB)
Installing collected packages: setuptools
Successfully installed setuptools-40.8.0

第三步,在 python3.9 中導入包觸發(fā)報錯:

E:\soft\python\python39\install>python
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import setuptools
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\soft\python\python39\install\lib\site-packages\setuptools\__init__.py", line 20, in <module>
from setuptools.dist import Distribution, Feature
File "E:\soft\python\python39\install\lib\site-packages\setuptools\dist.py", line 35, in <module>
from setuptools.depends import Require
File "E:\soft\python\python39\install\lib\site-packages\setuptools\depends.py", line 7, in <module>
from .py33compat import Bytecode
File "E:\soft\python\python39\install\lib\site-packages\setuptools\py33compat.py", line 55, in <module>
unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
AttributeError: 'HTMLParser' object has no attribute 'unescape'

2.1.2、setuptools 高版本解決報錯

setuptools-49.2.1 為例,測試如下:

第一步,卸載之前安裝的 setuptools:

E:\soft\python\python39\install>pip uninstall setuptools
Found existing installation: setuptools 40.8.0
Uninstalling setuptools-40.8.0:
 Would remove:
 e:\soft\python\python39\install\lib\site-packages\easy_install.py
 e:\soft\python\python39\install\lib\site-packages\pkg_resources\*
 e:\soft\python\python39\install\lib\site-packages\setuptools-40.8.0.dist-info\*
 e:\soft\python\python39\install\lib\site-packages\setuptools\*
 e:\soft\python\python39\install\scripts\easy_install-3.9.exe
 e:\soft\python\python39\install\scripts\easy_install.exe
Proceed (y/n)? y
 Successfully uninstalled setuptools-40.8.0

第二步,安裝 setuptools==49.2.1:

E:\soft\python\python39\install>pip install setuptools==49.2.1
Collecting setuptools==49.2.1
 Using cached setuptools-49.2.1-py3-none-any.whl (789 kB)
Installing collected packages: setuptools
Successfully installed setuptools-49.2.1

第三步,在 python3.9 中導入包:

E:\soft\python\python39\install>python
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import setuptools
>>> setuptools.__version__
'49.2.1'
>>>

目前最新版本,應該是到 setuptools-50.3.2 了 。

2.2、在 pycharm 中使用 python 解釋器

pycharm 中創(chuàng)建 python3.9 虛擬環(huán)境報錯,本質(zhì)上也是使用了 setuptools 的低版本導致。
我嘗試過更新 setuptools 為更高的版本,但 pycharm 還是頑固的使用了 setuptools-40.8.0,如最開始的報錯信息所示…

我不知道是 pycharm 中的某些默認配置導致,還是 pycharm 的版本屬性導致它使用了低版本的 setuptools,如果有朋友知道,歡迎告知。

雖然,不知道 pycharm 中選擇低版本 setuptools 的原因。這里,也簡單提供兩種解決方法吧~

2.2.1、virtualenv 創(chuàng)建虛擬環(huán)境

virtualenv 為應用提供隔離的 Python 運行環(huán)境,可以解決不同應用間多版本 python 的沖突問題。

利用 virtualenv 創(chuàng)建虛擬環(huán)境后,pycharm 中創(chuàng)建虛擬環(huán)境時,選擇已存在的虛擬環(huán)境,可以避開報錯。

第一步: 確認 python3.9 對應的 pip 工具。
如果沒有配環(huán)境變量,可以直接從安裝路徑下打開 cmd 工具。一般在 python 安裝目錄下的 Scripts 文件夾內(nèi)。使用 pip -V 可以查看 pip 對應的 python 版本。

E:\soft\python\python39\install>pip -V
pip 20.2.4 from e:\soft\python\python39\install\lib\site-packages\pip (python 3.9)

第二步: 安裝 virtualenv。

pip install virtualenv

第三步: 創(chuàng)建虛擬環(huán)境。
virtualenv 指令用于創(chuàng)建虛擬環(huán)境,后跟虛擬環(huán)境保存路徑。

virtualenv E:\soft\python\python39\env

如果需要刪除虛擬環(huán)境,直接刪除對應文件夾即可。

第四步: pycharm 中選擇已存在的虛擬環(huán)境。
"File --> Settings --> Python Interpreter",進入對應界面。

pycharm中選擇已存在虛擬環(huán)境

這里,需要選擇到虛擬環(huán)境中的 python.exe,否則 OK 鍵為灰色,無法點擊。

通過該方法,可以在原本報錯的 pycharm 中創(chuàng)建 python3.9 虛擬環(huán)境。

2.2.2、pycharm 版本更換

報錯版本為:pycharm-community-2019.2.1
下載安裝最新版本:pycharm-community-2020.2.3。

點擊運行要安裝的 pycharm-community-2020.2.3.exe 文件,會自動檢測,提示卸載已安裝的pycharm

為避免其他問題,卸載過程中,可以選擇刪除舊版本配置等。

卸載過程中選擇刪除緩存配置和已安裝插件等

經(jīng)過測試,使用最新版本 pycharm 可以成功創(chuàng)建 python3.9 虛擬環(huán)境。
為了驗證是否為 pycharm 的版本兼容問題,我卸載最新版本,重新安裝舊版本 pycharm 后,依然報錯!我猜測是固定的 pycharm 版本,使用了固定的某些 setuptools 版本,導致了兼容性報錯。

我也懷疑過是系統(tǒng)中多個版本 python 的環(huán)境變量順序,導致pycharm 找到了錯誤的依賴項。嘗試在環(huán)境變量中將 python3.9 相關值移動到最前面,依然不能解決問題。

看來,最新的 python 還是得配最新的 pycharm!編碼界的愛情故事么…

三、原因分析

感興趣的朋友,歡迎繼續(xù)閱讀。

Traceback 報錯日志中,可以看到,是在 setuptools-40.8.0\setuptools\py33compat.py 的55行, 執(zhí)行 unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) 時,拋出了 AttributeError: 'HTMLParser' object has no attribute 'unescape' 異常。

可以肯定是由 setuptools 引起的報錯。這里有一個關鍵的信息:py33compat.py 文件。
pyXXcompat.pysetuptools 兼容 python 版本相關的文件。

進入到 ..\Lib\site-packages\setuptools 查看 setuptools-40.8.0 的安裝文件,可以看到,包含了 py27compat.pypy31compat.py 、py33compat.py

setuptools-40.8.0兼容文件

進入到 ..\Lib\site-packages\setuptools 查看 setuptools-49.2.1 的安裝文件,可以看到,只包含了 py34compat.py 。

setuptools-49.2.1兼容文件

而我們從 python3.9changelog 中,可以知道 HTMLParser.unescape 屬性被移除了,并且從 python3.4 開始就被棄用了。

所以,從兼容 python3.4 開始,setuptools 中就放棄了使用 HTMLParser.unescape
因此,只要包含 py34compat.py 文件的 setuptools 版本,就能兼容 python3.9 版本。

到此這篇關于關于pycharm 切換 python3.9 報錯 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的問題的文章就介紹到這了,更多相關pycharm 切換 python3.9 報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python的Django框架中使用SQLAlchemy操作數(shù)據(jù)庫的教程

    Python的Django框架中使用SQLAlchemy操作數(shù)據(jù)庫的教程

    SQLAlchemy是Python一個專門的數(shù)據(jù)庫管理工具,如果對Django ORM覺得有些生疏的話完全可以結合SQLAlchemy,這里我們就來總結一下Python的Django框架中使用SQLAlchemy操作數(shù)據(jù)庫的教程
    2016-06-06
  • 快速解決jupyter notebook啟動需要密碼的問題

    快速解決jupyter notebook啟動需要密碼的問題

    這篇文章主要介紹了快速解決jupyter notebook啟動需要密碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python add_argument()用法解析

    python add_argument()用法解析

    這篇文章主要介紹了python add_argument()用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • python矩陣基本運算的實現(xiàn)

    python矩陣基本運算的實現(xiàn)

    本文主要介紹了python?矩陣的基本運算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作

    python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作

    這篇文章主要介紹了python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python制作微信機器人教程詳解

    Python制作微信機器人教程詳解

    這篇文章主要介紹了Python如何實現(xiàn)微信機器人,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-12-12
  • python Socket之客戶端和服務端握手詳解

    python Socket之客戶端和服務端握手詳解

    這篇文章主要為大家詳細介紹了python Socket之客戶端和服務端握手,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Python用二分法求平方根的案例

    Python用二分法求平方根的案例

    這篇文章主要介紹了Python用二分法求平方根的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 解析Mac OS下部署Pyhton的Django框架項目的過程

    解析Mac OS下部署Pyhton的Django框架項目的過程

    這篇文章主要介紹了Mac OS下部署Pyhton的Django框架項目的過程,還附帶將了一個gunicorn結合Nginx來部署Django應用的方法,需要的朋友可以參考下
    2016-05-05
  • 如何理解Python中的變量

    如何理解Python中的變量

    在本篇文章里小編給大家分享的是關于Python中變量是什么意思的相關基礎知識點,需要的朋友們可以學習下。
    2020-06-06

最新評論