解决 Pycharm 使用高版本 python(3.9)报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 之修改pycharm

由于Python出现3.10版本,此方法修改后仍会导致python版本识别错误,所以不再推荐此方法。

感谢

本篇博文参考了以下内容:

程序员的一天--pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 解决

原料(环境)

系统: macOS 10.14.6

pycharm 版本:2019.3.5

python 版本:3.9

原因

导致这个问题的主要原因是pycharm内置了特定版本的setuptools,这里2019.3.5内置了setuptools-40.8.0的安装包,放在:

/Applications/PyCharm.app/Contents/plugins/python/helpers
# windows 在安装文件夹\plugins\python\helpers

名为setuptools-40.8.0.tar.gz。

另外还硬写了setuptools的版本号,对应文件为:

/Applications/PyCharm.app/Contents/plugins/python/lib/python.jar
# windows 在 安装文件夹\plugins\python\lib\python.jar

解决办法(python 3.10及以上版本,不推荐使用)

  1. 更新新版的setuptools
    (1)下载新版setuptools(59.1.1可用, 下载源码包.tar.gz和打包好的.whl, whl在重新修改virtualenv-16.4.3时会用到)
    https://pypi.org/project/setuptools/#files
    (2)将源码包(setuptools-59.1.1.tar.gz)放到目标目录/Applications/PyCharm.app/Contents/plugins/python/helpers
    (3)ls /Applications/PyCharm.app/Contents/plugins/python/helpers/setuptools-*
    output:
    /Applications/PyCharm.app/Contents/plugins/python/helpers/setuptools-40.8.0.tar.gz
    /Applications/PyCharm.app/Contents/plugins/python/helpers/setuptools-59.1.1.tar.gz
    
  2. 更新virtualenv-16.4.3

    # 解压
    tar -xvf virtualenv-16.4.3.tar.gz
    # 修改virtualenv.py文件
    # 查找 sysconfig._get_default_scheme
    # 替换为:
    #         scgds = sysconfig._get_default_scheme if hasattr(sysconfig, '_get_default_scheme') else sysconfig.get_default_scheme
    #        if scgds() == "posix_local":
    # 删掉旧的whl包
    rm -rf ./virtualenv_support/*.whl
    # 从pypi下载新的包放进去
    # pip # https://pypi.org/project/pip/#files
    # setuptools # https://pypi.org/project/setuptools/#files
    # wheel # https://pypi.org/project/wheel/#files
    

  3. 修改python.jar的硬写的setuptools版本号
    这里不再推荐sed二进制改写,还是用16进制编辑器如winhex(查找文本40.8.0进行替换59.1.1, 应该能找到2-3个地方)
    # 只用sed修改版本号(mac 系统需要 gsed)
    # gsed -b -i s/setuptools-40.8.0/setuptools-50.3.2/g /Applications/PyCharm.app/Contents/plugins/python/lib/python.jar
    # -b 使用Binary模式
    # -i inplace替换

你可能感兴趣的:(软件应用经验,python,pycharm)