首页 > 解决方案 > Python 启动器不使用指定版本的 Python 运行脚本(Win 10)

问题描述

为什么启动器不使用指定版本的 Python 运行脚本?

主机是安装了 CPython 3.7 的 Windows 10 机器。运行具有以下内容的python脚本...

#! /usr/bin/env python3

import sys

print(sys.version)
print(sys.path)

产生以下...

2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)]
['C:\\PROGRA~2\\python27\\lib\\site-packages\\pars-0.1.0-py2.7.egg', 'C:\\Windows\\SYSTEM32\\python27.zip', 'C:\\PROGRA~2\\python27\\DLLs', 'C:\\PROGRA~2\\python27\\lib', 'C:\\PROGRA~2\\python27\\lib\\plat-win', 'C:\\PROGRA~2\\python27\\lib\\lib-tk', 'C:\\PROGRA~2\\python27', 'C:\\PROGRA~2\\python27\\lib\\site-packages']

Python 3.7 在我的路上。运行python --versionpy --version返回 Python 3.7.3。

这让我发疯。

标签: pythonpython-3.xwindows

解决方案


为了解决这个问题,我必须修复“.py”文件和 的关联py.exe,这在我的机器上被破坏了。

注意:用户“ETalbot”在线程中提供了答案,我应该输入 #! (shebang) 在 Python 脚本中,它应该采用什么形式?. 归功于他的答案(投票赞成他的答案)。我在客户的笔记本电脑上。我无权更改他在 HKEY_LOCAL_MACHINE (HKLM) 下建议的注册表更改。我在 HKEY_LOCAL_USER (HKLU) 中做了同样的效果。对于我这种情况的人,我在这里添加了进行更改的步骤。

在 Windows 上使用 Python包括第 3.8.1.4 节下的以下指南。从文件关联:

启动器在安装时应该与 Python 文件(即 .py、.pyw、.pyc 文件)相关联。这意味着当您从 Windows 资源管理器中双击其中一个文件时,将使用启动器,因此您可以使用上述相同的工具让脚本指定应使用的版本。

将以下内容中的注册表项设置为"C:\Windows\py.exe" "%1" %*

HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\shell\open\command

如果您不确定如何在 Windows 上编辑注册表,请使用以下指南:

  1. 创建一个名为“python.reg”的文件。
  2. 将以下内容放入文件中。

注意:有关图标和放置文件类标识符的指导,请参阅 Eryk Sun 对这篇文章的评论。这里的一些值是特定于我的系统的。


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File]
@="Python File"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\DefaultIcon]
@="C:\\PROGRA~2\\python27\\DLLs\\py.ico"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\Edit with IDLE]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\Edit with IDLE\command]
@="\"C:\\PROGRA~2\\python27\\pythonw.exe\" \"C:\\PROGRA~2\\python27\\Lib\\idlelib\\idle.pyw\" -e \"%1\""

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\editwithidle]
"MUIVerb"="&Edit with IDLE"
"Subcommands"=""

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\editwithidle\shell]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\editwithidle\shell\edit37]
"MUIVerb"="Edit with IDLE 3.7 (64-bit)"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\editwithidle\shell\edit37\command]
@="\"C:\\Program Files\\Python37\\pythonw.exe\" -m idlelib \"%L\" %*"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\open]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\Shell\open\command]
@="\"C:\\Windows\\py.exe\" \"%1\" %*"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\shellex]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

  1. 启动regedit
  2. 文件菜单中选择导入...。
  3. 选择您创建的名为“python.reg”的文件。
  4. 在提示符处单击确定,这应该表明成功。

如果你重新运行我之前的帖子中的用例,你会发现它现在可以工作了。

作为参考,首先咨询 HKLU,然后咨询 HKLM,因此 HKLU 中的内容取代了 HKLM 中的密钥。此外,作为用户,您通常可以访问 HKLU,因为......您是用户:-)

用户“ErykSun”指出(a)这个问题可以通过修复安装来解决,并且(b)路径/调用py.exe对用户(不是系统)范围的安装不起作用。虽然 (a) 由于系统权限的原因对我来说不是一个选择,但它可能是一个更安全的选择。py.exe而且,Python 在我的系统上全局安装,如果您以不同方式安装 Python,您可能需要调整路径。


推荐阅读