python - 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 --version
或py --version
返回 Python 3.7.3。
这让我发疯。
解决方案
为了解决这个问题,我必须修复“.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 上编辑注册表,请使用以下指南:
- 创建一个名为“python.reg”的文件。
- 将以下内容放入文件中。
注意:有关图标和放置文件类标识符的指导,请参阅 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}"
- 启动
regedit
。 - 从文件菜单中选择导入...。
- 选择您创建的名为“python.reg”的文件。
- 在提示符处单击确定,这应该表明成功。
如果你重新运行我之前的帖子中的用例,你会发现它现在可以工作了。
作为参考,首先咨询 HKLU,然后咨询 HKLM,因此 HKLU 中的内容取代了 HKLM 中的密钥。此外,作为用户,您通常可以访问 HKLU,因为......您是用户:-)
用户“ErykSun”指出(a)这个问题可以通过修复安装来解决,并且(b)路径/调用py.exe
对用户(不是系统)范围的安装不起作用。虽然 (a) 由于系统权限的原因对我来说不是一个选择,但它可能是一个更安全的选择。py.exe
而且,Python 在我的系统上全局安装,如果您以不同方式安装 Python,您可能需要调整路径。
推荐阅读
- vb.net - 更改 DataGridViewButtonCell 的背景颜色
- java - CRUD API Spring Boot 复制条目
- dictionary - groovy嵌套地图更新值而不检查值类型
- python - 如何为 nlohmann::basic_json 编写自定义调试助手?
- java - SoapuUI.setSoapUICore 导致 Junit 线程结束
- python - Pandas Dataframe 替换异常值
- scala - 如何使用参数化类作为键来操作地图
- css - 宽度和最大宽度(css)
- wordpress - 在自定义插件中提供对 WP Hooks 的支持
- vue.js - 通过直接用对象替换它的值来改变对象状态