Error: Command '['C:\\Users\\kesh\\test\\.venv\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 101.
我正在努力弄清楚到底发生了什么,但很快就没有了想法。以下是我迄今为止尝试过的方法:
在我的电脑上,“为所有用户安装”与按用户安装在虚拟账户上一样有效(都使用相同的v3.10.2安装程序)。这将问题归结为我的Windows账户。更改安装位置没有帮助。 通过运行带有venv.main(args=('.venv',))的Python进入venv源代码,逐行调试并注意到它使用shutil.copyfile()将Lib\venv\scripts\nt\python.exe从Python安装目录复制到本地.venv\Scripts文件夹中。 如果我在命令提示符中运行原始的Lib\venv\scripts\nt\python.exe,则会显示“无pyvenv.cfg文件”的消息(这是有道理的,因为.cfg文件在.venv文件夹中,它看不到)。 如果我调用已复制的.venv\Scripts\python.exe,则会返回错误“无法使用'C:\Users\kesh\AppData\Local\Programs\Python\Python310\python.exe'创建进程”(请注意,进程的python.exe路径是已安装的Python exe的路径)。 如果成功安装了.venv(在虚拟Windows帐户上),则上述运行会像您预期的那样启动Python会话。 venv\scripts\nt\python.exe与标准的python二进制文件不同,并验证该文件及其venv\Scripts\nt中的源代码是相同的。 所有这些都表明,我的帐户配置中的某些内容正在干扰.venv\Scripts\python.exe执行正确的操作,但我的环境变量非常干净,Python路径位于用户PATH变量的顶部。 目前正在尝试找到.venv\Scripts\python.exe的源代码,但还没有找到它。 可能是注册表中的某些问题吗?如果你有其他想法可以尝试,请分享。
更新 #1:
- 找到错误信息的来源
PC/launcher.c
第814行 - 可能性:
CreateProcessW(NULL, cmdline,...
其中cmdline
是错误信息中原始的 python 路径,没有引号。CreateProcessW documentation 指出可执行文件名是从cmdline
字符串中第一个以空格分隔的标记推断出来的。虽然我用实际账户名替换了kesh
,但它实际上由两个单词和一个空格组成...
更新 #2:
解决方案如下所述