win11下pyenv安装python后命令行执行python打开商店的处理

864 阅读2分钟

问题

问题标签:windows, win11, python, pyenv安装python, 命令行执行python, 打开商店应用

在win11下,通过pyenv成功安装了python(检查系统的path变量,包括了%pyenv%/pyenv-win/shims,并且shime目录下有python执行文件)。

然而,在commadline或powershell中,输入python命令,打开的是商店应用,而不是期待的进入交互式REPL会话。

2023-07-25-14-54-01.png

处理方法

python命令打开了商店链接,这是因为有个系统定义的python命令有更高执行优先级,并且指向了商店。 关闭这个系统定义的命令,就能正常执行pyenv指定的python。

关闭方法

通过以下步骤关闭系统定义的python快捷命令。 搜索“app alias” -> 在结果中点击“manage app execution aliases” 打开设置 -> 关闭python/python3 alias

2023-07-25-14-52-48.png 2023-07-24-18-54-54.png

关闭后的检查

`
C:>python -V Python 3.8.5

C:>where.exe python
C:\Users\leon.pyenv\pyenv-win\shims\python
C:\Users\leon.pyenv\pyenv-win\shims\python.bat

C:>
`

原因探索

windows的python快捷命令的说明

官方说明链接:learn.microsoft.com/zh-cn/windo…

  • 这项设置,会在 %User%\AppData\Local\Microsoft\WindowsApps目录下生成对应的python.exe和python3.exe文件
  • 其他安装程序可能以低于内置快捷方式的优先级添加的python
    • 该目录是系统path的目录。
    • 通过pyenv安装的python,是增加到用户path里面。
    • 用户执行环境中,完整的path是系统path后面追加用户path这样的合并方式,也就是用户path在搜索路径的后面部分,按这个顺序,被执行的是WindowsApps下的python而不是pyenv安装的。 通过关闭alias,WindowsApps下的python/python3会被删除。执行python命令时,就会找到在用户path中的执行文件了

其他尝试

  • 也可以直接修改系统path,将%pyenv%/pyenv-win/shims加到最前面,这样最先被搜索到的就是pyenv安装的python
  • 直接到%User%\AppData\Local\Microsoft\WindowsApps目录删除python.exe和python3.exe
    • 删除后,windows的alias管理界面依然显示python/python3快捷方式时激活状态,会造成界面和实际的不一致
  • 直接使用微软商店安装python

总结

  • pyenv安装的python在路径中优先级较低(在用户path,低于系统path)
  • 要正确执行python,需要关闭windows的alias定义的python快捷入口