安装Django项目requirements.txt报UnicodeDecodeError如何解决
报错根因
安装失败的触发点是第三方依赖django-localized-names的旧版本安装脚本setup.py存在编码兼容问题:脚本读取README.rst文件时没有显式指定文件编码,在Windows环境下Python会默认调用系统本地编码(从报错栈看你的系统默认编码是cp1251西里尔编码),无法解析README文件中0x98位置的特殊字符,最终触发UnicodeDecodeError。
这个问题和pip、pipenv/venv虚拟环境工具本身没有关系,Linux/macOS系统默认全局使用UTF-8编码,不会触发同类报错。
可按优先级尝试以下修复方案
方案1:临时启用Python UTF-8模式安装(最简便)
在激活虚拟环境的终端中,先设置全局UTF-8编码环境变量,再执行依赖安装命令即可绕过问题:
- 若使用CMD命令行:
set PYTHONUTF8=1 pip install -r requirements.txt
- 若使用PowerShell命令行:
$env:PYTHONUTF8=1 pip install -r requirements.txt
该环境变量仅对当前终端窗口生效,不会修改系统全局配置,强制Python所有文件读写操作默认使用UTF-8编码,刚好覆盖setup.py缺失编码参数的场景。
方案2:手动修复问题包的安装脚本
如果方案1执行后仍报错,可以手动修复安装脚本后本地安装问题包:
- 先下载对应版本的
django-localized-names源码包并解压到本地 - 打开解压目录下的
setup.py文件,找到read函数的文件打开语句,修改为显式指定UTF-8编码:# 原代码 return open(os.path.join(os.path.dirname(__file__), fname)).read() # 修改后 return open(os.path.join(os.path.dirname(__file__), fname, encoding='utf-8')).read() - 在解压目录下执行
pip install .完成该包的本地安装 - 回到项目根目录重新执行
pip install -r requirements.txt,pip检测到该依赖已安装,会跳过拉取安装步骤,不会再触发编码报错。
方案3:升级问题包到修复版本
检查项目requirements.txt中django-localized-names的版本锁定规则,如果锁的是0.2.x及更早的老旧版本,可以直接将版本号修改为最新正式版,新版本已经修复了setup.py未指定编码的兼容问题,直接执行安装即可正常完成。
注意:无需反复重建虚拟环境排查问题,该问题和虚拟环境隔离逻辑无关,仅为Windows环境下旧第三方包的编码兼容缺陷。
内容的提问来源于stack exchange,提问作者Muhriddin Komilov
相关产品推荐
相关产品推荐

