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

kes*_*esh 5 python windows python-venv

此问题已解决,并向 Python.org 提交了错误报告。请参阅下面我的自我回答以了解解决方法,直到它在 Python 的未来版本中得到修复

\n

我的一台电脑被这个 bug 咬了,它不再允许我创建 venv,并出现以下错误:

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

我试图弄清楚究竟发生了什么,但很快就没有想法了。以下是我到目前为止所尝试过的:

\n
    \n
  • 在我的电脑上,“为所有用户安装”以及虚拟帐户上的每用户安装都有效(全部使用相同的 v3.10.2 安装程序)。这表明问题出在我的 Windows 帐户上。更改安装位置没有帮助。
  • \n
  • venv通过运行 Python进入源代码venv.main(args=(\'.venv\',)),逐行调试,并注意到它使用Lib\\venv\\scripts\\nt\\python.exe.py 从 python 安装目录复制到本地文件夹。.venv\\Scriptsshutil.copyfile()
  • \n
  • 如果我在命令提示符下运行原始文件Lib\\venv\\scripts\\nt\\python.exe,它会运行一条消息No pyvenv.cfg file(这是有道理的,因为 .cfg 文件位于.venv它看不到的文件夹中)
  • \n
  • 如果我调用复制的文件.venv\\Scripts\\python.exe,则会返回错误Unable to create process using \'C:\\Users\\kesh\\AppData\\Local\\Programs\\Python\\Python310\\python.exe\'(请注意,该python.exe进程的路径是已安装的 Python exe 的路径)
  • \n
  • 如果.venv安装成功(在虚拟 Windows 帐户上),上面的运行将按照您的预期启动 Python 会话。
  • \n
  • venv\\scripts\\nt\\python.exe与标准二进制文件不同python,并验证该文件及其源venv\\Scripts\\nt是相同的。
  • \n
  • 所有这些都表明我的帐户配置中的某些内容正在困扰做.venv\\Scripts\\python.exe正确的事情,但我的环境变量非常干净,并且 python 路径位于用户 PATH 变量的顶部。
  • \n
  • 目前正在尝试查找其源代码,.venv\\Scripts\\python.exe但尚未找到。
  • \n
  • 它可以是注册表中的东西吗?
  • \n
\n

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

\n

更新#1:

\n
    \n
  • PC/launcher.c找到错误消息814行的来源
  • \n
  • 可能性:错误消息中原始python路径在CreateProcessW(NULL, cmdline,...哪里,不带引号。CreateProcessW 文档指出可执行文件名称是从字符串中的第一个空格 \xe2\x80\x93 分隔的标记推导出来的。虽然我用它替换了我的实际帐户名,但它实际上包含两个单词和一个空格......cmdlinecmdlinekesh
  • \n
\n

更新#2:

\n

找到的解决方案如下所示

\n

kes*_*esh 15

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

假设每个用户的 python 安装在

C:\Users\User Name\AppData\Local\Programs\Python\Python310
Run Code Online (Sandbox Code Playgroud)

就我而言,“Microsoft Visual C++ 2015-2022 Redistributable”安装程序 (VC_redist.x64.exe) 留下了一个日志文件C:\Users\User(一个文本文件,其中我的帐户名的第一部分作为其文件名)。这导致 python venv 用作C:\Users\Userpython 可执行文件并立即失败(有关完整说明,请参阅下面的问题跟踪器链接)。

在 Python 修复问题之前,您可以通过 2 种方式解决该问题。

轻松修复

只需删除文件即可C:\Users\User

注意:这将一直有效,直到下次另一个安装程序留下这个令人讨厌的日志文件。

更多涉及修复

在命令控制台中,运行

DIR /X C:\Users
Run Code Online (Sandbox Code Playgroud)

其中列出了类似的内容:

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
Run Code Online (Sandbox Code Playgroud)

打开环境变量对话框并编辑 Path 用户变量的 Python 条目

C:\Users\User Name\AppData\Local\Programs\Python\Python310\Scripts
C:\Users\User Name\AppData\Local\Programs\Python\Python310
Run Code Online (Sandbox Code Playgroud)

C:\Users\USERNA~1\AppData\Local\Programs\Python\Python310\Scripts
C:\Users\USERNA~1\AppData\Local\Programs\Python\Python310
Run Code Online (Sandbox Code Playgroud)

重新打开 python 控制台窗口或应用程序,以便将路径更改应用于您的开发环境。

注意:只要您不更新 python 版本,此修复程序就会起作用。执行此操作时,您需要手动删除旧路径条目并更新新路径条目。

最终修复

我向 python 错误跟踪器报告了这个错误:Issue 46686。他们已经承认了该错误,并将其标记为critical建议的修复方案。因此,希望它能在不久的将来版本中得到修复。(>3.10.2)