【问题标题】:Windows Python (<=3.10.2) fails to run `python -m venv .venv`Windows Python (<=3.10.2) 无法运行“python -m venv .venv”
【发布时间】:2022-02-10 10:13:30
【问题描述】:

此问题已解决,已向 Python.org 报告错误。有关解决方法,请参阅我的self-answer below,直到它在 Python 的未来版本中得到修复

我的一台电脑被这个错误所困扰,不再允许我创建带有错误的 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
  • 唯一已知的解决方案是通过选中“为所有用户安装”选项放弃按用户安装并使用全局安装

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

  • 在我的 PC 上,“为所有用户安装”和在虚拟帐户上按用户安装一样有效(都使用相同的 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,它会运行一条消息 No pyvenv.cfg file(这是有道理的,因为 .cfg 文件位于它看不到的 .venv 文件夹中)
  • 如果我调用复制的.venv\Scripts\python.exe,那么它会返回错误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 路径位于用户 PATH 变量的顶部。
  • 目前正在寻找.venv\Scripts\python.exe的源代码,但还没有找到。
  • 可以是注册表中的内容吗?

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

更新#1:

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

更新 #2:

找到的解决方案如下所示

【问题讨论】:

    标签: python windows python-venv


    【解决方案1】:

    Bingo,更新 #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 修复问题之前,您可以通过 2 种方式解决问题。

    轻松修复

    只需删除文件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
    

    打开环境变量对话框并编辑路径用户变量的 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 错误跟踪器:Issue 46686。他们已经确认了这个错误并将其标记为critical,并提出了修复建议。所以,希望它会在不久的将来的版本中得到修复。 (>3.10.2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多