我需要为.py文件设置关联以使用特定的python版本执行。但我需要仅为单个cmd.exe会话建立此关联(并行会话不应受影响)。 Windows是否允许这样做?
我怀疑答案是否定的,但是我希望看到一些证据,然后再将这个功能引入virtualenv。
你当然可以。您对雅各布答案的评论非常接近 -
如果可以更改文件与环境变量的关联 - 它会有所帮助,但似乎不可能。
有可能的。您所要做的就是在密钥的值中使用REG_EXPAND_SZ
类型的注册表项和环境变量。例如推杆
%python_home%\python %1 %*
作为(Default)
值
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
键和将其值设置为REG_EXPAND_SZ
可以定义将打开Python文件的Python。您可以通过设置python_home
环境变量来决定,当然也可以按命令行会话执行此操作。看看我对问题where in the registry does Windows store, with which program to open certain file types?的回答
说过现在有一个特殊的工具来解决这个问题,我强烈推荐。它被称为pylauncher。来自文档:
适用于Windows的PEP 397兼容启动器。请参阅http://www.python.org/dev/peps/pep-0397/获取PEP,http://www.red-dove.com/screencasts/launcher/launcher.html获取截屏视频
如果将其添加到PATHEXT环境变量,您甚至可以跳过.py扩展名。看问题What environment variables will be used when calling an EXE from command line?
在Windows中,您可以使用assoc
和ftype
命令从命令行更改文件关联(您当前可以从here下载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
来调用python。文件关联是全局的,并在进程之间共享。环境变量是进程的本地变量,这就是我建议这个解决方案的原因。
您可以使用windows set命令设置临时关联,只要shell执行,set就会持续,除非附加到系统环境变量。