【发布时间】: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.
我正试图弄清楚到底发生了什么,但很快就没有想法了。以下是我迄今为止尝试过的:
- 在我的 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.cLine 814 - 可能性:
CreateProcessW(NULL, cmdline,...其中cmdline是错误消息中的原始 python 路径,没有引号。 CreateProcessW documentation 状态可执行文件名称是从cmdline字符串中的第一个空格分隔的标记推导出来的。虽然我用kesh替换了我的实际帐户名称,但它实际上包含两个单词和一个空格...
更新 #2:
找到的解决方案如下所示
【问题讨论】:
标签: python windows python-venv