Windows Python (<=3.10.2)无法运行`python -m venv .venv`。

5
这个问题已经得到解决,导致了一个向Python.org报告错误的bug。请参见我的下面的自我回答,直到在未来的Python版本中修复该问题之前使用解决方法。 我的一台电脑遭受了这个bug的攻击,不再允许我创建venv,并显示错误信息:
Error: Command '['C:\\Users\\kesh\\test\\.venv\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 101.
  • 这个问题已经被发现,时间顺序是:v3.7.2v3.8v3.?v3.10.1
  • 唯一已知的解决方案是放弃每个用户安装并使用全局安装,勾选“为所有用户安装”选项

我正在努力弄清楚到底发生了什么,但很快就没有了想法。以下是我迄今为止尝试过的方法:

在我的电脑上,“为所有用户安装”与按用户安装在虚拟账户上一样有效(都使用相同的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:

解决方案如下所述

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
14
更新1中的发现是问题的原因。我的用户名中的空格是罪魁祸首。虽然我不知道是什么触发了我的账户的这种行为变化...(如果有人知道答案,请跟进。) 假设每个用户的Python安装在
C:\Users\User Name\AppData\Local\Programs\Python\Python310
在我的情况下,"Microsoft Visual C++ 2015-2022 Redistributable"安装程序(VC_redist.x64.exe)留下了一个日志文件C:\Users\User(一个以我的账户名为文件名的文本文件)。这导致python venv将C:\Users\User作为python可执行文件并立即失败(有关完整说明,请参见下面的问题跟踪器链接)。 在Python修补此问题之前,您可以通过以下两种方式解决该问题。

简单解决方法

只需删除文件C:\Users\User 注意:直到下一次另一个安装程序留下这个恶心的日志文件,该方法才有效。

更深入的解决方法

在命令控制台中运行:
DIR /X C:\Users

这将列出类似以下内容的东西:

02/08/2022  11:44 AM    <DIR>                       .
02/08/2022  11:44 AM    <DIR>                       ..
11/19/2020  01:48 AM    <DIR>                       Public
02/08/2022  02:47 PM    <DIR>          USERNA~1     User Name

打开环境变量对话框,并编辑“Path”用户变量中的Python条目,从

C:\Users\User Name\AppData\Local\Programs\Python\Python310\Scripts
C:\Users\User Name\AppData\Local\Programs\Python\Python310

为了

C:\Users\USERNA~1\AppData\Local\Programs\Python\Python310\Scripts
C:\Users\USERNA~1\AppData\Local\Programs\Python\Python310
重新打开 Python 控制台或应用程序,以便路径更改适用于您的开发环境。 注意:此修复方法只在不更新 Python 版本时有效。一旦更新了版本,您需要手动删除旧的路径条目并更新新的路径条目。

最终修复

我向 Python Bug 追踪器报告了这个 bug:Issue 46686。他们已经确认了这个 bug 并将其标记为 critical ,并提出了一个解决方案。因此,希望它能在近期发布的版本中得到修复。(>3.10.2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,