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

Windows Python (<=3.10.2) fails to run `python -m venv .venv`

此问题已解决,导致错误报告 Python.org。在 Python

的未来版本中修复之前,请参阅我的 以了解解决方法

我的一台 PC 被这个错误咬伤,它不再允许我创建带有错误的 venv:

Error: Command '['C:\Users\kesh\test\.venv\Scripts\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 101.
  • 此问题已为人所知,按时间顺序排列:v3.7.2, , v3.?, &
  • 唯一已知的解决方案是通过选中“为所有用户安装”选项放弃按用户安装并使用全局安装

我正试图弄清楚究竟发生了什么,但很快就运行想出了主意。到目前为止,这是我尝试过的方法:

  • 在我的电脑上,“为所有用户安装”和虚拟帐户上的每个用户安装一样有效(都使用相同的 v3.10.2 安装程序)。这挑出问题出在我的 Windows 帐户上。更改安装位置没有帮助。
  • 通过 运行ning Python 和 venv.main(args=('.venv',)) 进入 venv 源代码,逐行调试并注意到它从 Lib\venv\scripts\nt\python.exe python 使用 shutil.copyfile().
  • 将目录安装到本地 .venv\Scripts 文件夹
  • 如果我在命令提示符中 运行 原来的 Lib\venv\scripts\nt\python.exe,它 运行 带有消息 No pyvenv.cfg file(这很有意义,因为 .cfg 文件位于 .venv 它看不到的文件夹)
  • 如果我调用复制的 .venv\Scripts\python.exe 那么它 returns 一个错误 Unable to create process using '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 路径位于用户的顶部路径变量。
  • 目前正在尝试查找 .venv\Scripts\python.exe 的源代码,但尚未找到。
  • 它可以是注册表中的东西吗?

如果您有任何其他想法可以尝试,请分享。

更新 #1:

  • 找到错误信息的来源PC/launcher.c第814行
  • 可能性:CreateProcessW(NULL, cmdline,... 其中 cmdline 是错误消息中的原始 python 路径,没有引号。 CreateProcessW documentation 声明可执行文件名称是从 cmdline 字符串中的第一个白色 space 分隔标记推导出来的。虽然我用 kesh 替换了我的实际帐户名,但它实际上包含两个词和一个 space...

更新#2:

找到如下发布的解决方案

Bingo,更新 #1 中的发现是原因。我用户名中的 space 是罪魁祸首。 虽然我不知道是什么触发了我帐户上的这种行为变化......(任何有答案的人,请跟进。)

假设 per-user 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 可执行文件并立即失败(请参阅下面的问题跟踪器 link 了解完整解释)。

您可以通过两种方式解决问题,直到 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

Re-open python console window or app 所以路径更改会应用到您的开发环境。

注意:只要您不更新 python 版本,此修复就会有效。当您这样做时,您需要手动删除旧路径条目并更新新路径条目。

最终修复

我已将此错误报告给 python 错误跟踪器:Issue 46686。他们已经确认了该错误并将其标记为 critical 并提出了修复建议。所以,希望它能在不久的将来的版本中得到修复。 (>3.10.2)