【发布时间】:2020-02-03 04:44:09
【问题描述】:
以前,我安装了 Python 3.7.4,并且在 Win10 上运行良好。然后,第 3 方安装程序(我不知道)安装了 Python 2.7 ......这完全淹没了我的 Python 环境(呃)。在删除 Python 2.7 并运行 Python 3.7.4 的修复重新安装后,它大部分都可以备份并运行 - 除了能够拖放到 .py 文件上。
每个Drag and drop onto Python script in Windows Explorer 和Python Drag-and-drop broken,我都试过了:
注册:
HKCR\.py=Python.File (when I first checked, it was set to py_auto_file, so I did have to change this)
HKCR\Python.File\shell\open\command="C:\Users\xxx\AppData\Local\Programs\Python\Python37-32\python.exe" "%1"
HKCR\Python.File\shellex\DropHandler= I've tried {60254CA5-953B-11CF-8C96-00AA00B8708C}, {86C86720-42A0-1069-A2E8-08002B30309D}, and {BEA218D2-6950-497B-9434-61683EC065FE}
通过上述更改,我能够在拖放到 .py 文件时启动 Python,但 sys.argv 不包含文件名(仅设置了 argv[0],而不是 argv[1] )。显然,我在每次测试之间重新启动 Windows 资源管理器。在过去的几个小时里,我一直在搜索和阅读,但我发现的所有内容几乎都包含上述 3 项更改的一些变体。
任何想法为什么通过将文件拖到 .py 脚本启动 Python 时不会设置 argv[1]?
【问题讨论】:
-
首先在“HKCU\Software\Classes”和“HKLM\Software\Classes”中检查“Python.File”。 (切勿通过“HKCR”修改密钥。)确保“shellex\DropHandler”的默认值为“{BEA218D2-6950-497B-9434-61683EC065FE}”(如果已定义)。接下来修复您的安装,并确保选择了安装启动器 (py.exe) 并将其与脚本关联的选项。后者将启动器设置为“Python.File\shell\open\command”。
-
最后,让这个 progid 成为您在 Windows shell 中的用户选择,它可以控制右键单击操作和放置处理程序。为此,请右键单击 .py 文件并选择“打开方式”->“选择另一个应用程序”。选择上面带有火箭的 Python 图标和“始终使用此应用打开 .py 文件”选项。
-
如果您好奇或需要验证 drop-handler 设置,您可以检查“HKCR\CLSID\{BEA218D2-6950-497B-9434-61683EC065FE}\InprocServer32”。这是加载到托管 Windows shell(例如 explorer.exe)的进程中的 shell 扩展 DLL。对于 64 位系统,它应该是“pyshellext.amd64.dll”的路径。
-
你的“HKLM\Software\Classes\Python.File\shell\open\command”是什么?如果为所有用户安装了启动器,则应为
"%SystemRoot%\py.exe" "%1" %*,其中SystemRoot通常为“C:\Windows”。有时“%1”被替换为“%L”(很久以前它们的行为不同,但现在它们是等价的)。%*用于命令行参数。在手动更改之前,请尝试修复“Python Launcher”安装。这应该可以修复命令,如果它是错误的,使用启动器的安装路径。 -
在写之前我确实确认修复“Python Launcher”安装修复了打开命令。请注意,启动器安装与已安装程序列表中的 Python 安装是分开的。
标签: python python-3.x windows