Windows10/Python3.9环境Pipenv安装包因用户名含撇号报错如何解决
问题根源
你遇到的是Pipenv历史版本的已知Bug:动态拼接执行的Python代码路径没有做单引号转义,Windows用户名含单引号时会导致拼接的代码出现语法错误,后续依赖锁定环节shlex解析路径时也会因为引号未闭合抛出异常。
可行解决方案(按操作复杂度从低到高排序)
方案1:修改系统临时目录路径(最推荐,一劳永逸,无需改源码)
Pipenv生成临时JSON文件默认读取系统TEMP/TMP环境变量,直接修改这两个变量指向无特殊字符的路径即可绕开带撇号的用户目录:
- 在D盘新建纯英文无特殊字符的文件夹,例如
D:\dev_temp - 打开Windows系统环境变量设置,修改当前用户的环境变量里的
TEMP和TMP,将两个变量的值都改成你新建的文件夹路径 - 重启终端后重新执行Pipenv命令即可生效
方案2:升级Pipenv到最新版本
该路径单引号转义Bug在Pipenv 2022.8.15及之后版本已经官方修复,直接执行升级命令即可解决:
pip install --upgrade pipenv
方案3:手动修复Pipenv源码拼接逻辑
如果因环境限制无法升级也不想改临时目录,可直接修改动态代码拼接逻辑:
- 打开路径
D:\installations\python\Lib\site-packages\pipenv\utils.py - 搜索生成那段动态Python代码的逻辑段,找到拼接临时文件路径的代码行
- 将原来用单引号包裹路径的写法改成双引号包裹,例如将原代码中的
f"fh = io.open('{tmp_file_path}', 'w')"修改为f"fh = io.open(r\"{tmp_file_path}\", 'w')",即可避免单引号冲突。
你之前修改escape_grouped_arguments未生效是因为该函数只处理Shell命令参数转义,不负责动态Python代码的路径拼接逻辑,所以不会生效。
内容的提问来源于stack exchange,提问作者poornamingconvention
相关产品推荐
相关产品推荐

