我需要为要使用特定 python 版本执行的 .py 文件设置关联。但我只需要为单个 cmd.exe 会话建立这种关联(并行会话不应该受到影响)。Windows 允许这样做吗?
我怀疑答案是否定的,但在放弃将此类功能引入virtualenv的想法之前,我希望看到一些证据。
我需要为要使用特定 python 版本执行的 .py 文件设置关联。但我只需要为单个 cmd.exe 会话建立这种关联(并行会话不应该受到影响)。Windows 允许这样做吗?
我怀疑答案是否定的,但在放弃将此类功能引入virtualenv的想法之前,我希望看到一些证据。
你当然可以。您在对雅各布的回答的评论中非常接近回答 -
如果可以更改与环境变量的文件关联 - 它会有所帮助,但似乎不可能。
有可能的。您所要做的就是REG_EXPAND_SZ
在键的值中使用注册表键的类型和环境变量。例如,将key
%python_home%\python %1 %*
的(Default)
值
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
设为 key 并将其值设置为REG_EXPAND_SZ
可以定义 Python 文件将使用什么 Python 打开。您可以通过设置python_home
环境变量来决定,当然您可以在每个命令行会话中执行此操作。看看我对Windows 存储在注册表中的哪个位置,使用哪个程序打开某些文件类型的问题的回答?
话虽如此,我强烈推荐现在有专门的工具来解决这个问题。它被称为pylauncher。从文档:
Windows 下 Python 的 PEP 397 兼容启动器。有关PEP, 请参阅 http://www.python.org/dev/peps/pep-0397/ ,有关截屏视频,请参阅 http://www.red-dove.com/screencasts/launcher/launcher.html
如果将.py扩展名添加到PATHEXT环境变量,您甚至可以跳过它。请参阅问题从命令行调用 EXE 时将使用哪些环境变量?
assoc
在 Windows 中,您可以使用和命令从命令行更改文件关联ftype
(您当前可以从此处下载Windows 命令参考PDF 文件)。
assoc
您可以使用以下命令查看当前与 .py 文件关联的文件类型:
> assoc .py
.py=Python.File
有了这些信息,您就可以使用以下命令查看当前与Python.File
文件类型关联的程序:ftype
> ftype Python.File
Python.File="C:\Python2.6\python.exe" "%1" %*
您还可以使用更改ftype
关联的程序:
> ftype Python.File="C:\Python2.7\python.exe" "%1" %*
Python.File="C:\Python2.7\python.exe" "%1" %*
以这种方式设置的关联是持久的,因为它们存储在 Windows 注册表中。这意味着您需要在终止cmd.exe
会话之前将其设置或恢复为您想要的。为此,我建议使用一个或多个批处理文件。
cmd.exe
它本身接受一个/k
参数,您可以使用该参数让它在启动时执行一个批处理文件,该文件设置您最初想要的文件关联。然后,您还可以提供一个自定义,在退出会话quit.bat
之前将其恢复。cmd
您最好的选择可能是在脚本中设置 PATH 变量并通过编写python script.py
. 文件关联是全局的并且在进程之间共享。环境变量是进程的本地变量,这就是我建议这个解决方案的原因。
您可以使用 windows set 命令设置临时关联,除非附加到系统环境变量,否则 set 将持续与 shell 一样长。