我需要为.py文件设置关联,以使用特定的python版本执行。 但是我只需要为单个cmd.exe会话创build这个关联(并行会话不应该受到影响)。 Windows允许这个吗?
我怀疑答案是否定的,但我希望看到一些certificate之前,抛出这个想法到virtualenv这样的function。
你当然可以。 你对Jakob的回答非常接近你的评论 –
如果可以更改与环境变量的文件关联 – 这将有所帮助,但似乎不可能。
有可能的。 您所要做的就是在密钥的值中使用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
环境变量来决定,当然你也可以通过命令行来做到这一点。 看看我的回答问题,在哪里注册表的Windows存储,与哪个程序打开某些文件类型?
话虽如此,现在有特别的工具来解决这个问题,我强烈推荐。 这就是所谓的pylauncher 。 从文档:
在Windows下用于Python的PEP 397兼容启动器。 有关PEP的信息,请参阅http://www.python.org/dev/peps/pep-0397/ http://www.red-dove.com/screencasts/launcher/launcher.html
如果将其添加到PATHEXT环境变量,您甚至可以跳过.py扩展名。 查看问题从命令行调用EXE时将使用什么环境变量?
在Windows中,您可以使用assoc
和ftype
命令从命令行更改文件关联(请参阅Windows命令行参考 )。
您可以使用assoc
命令查看当前与.py文件关联的文件类型:
> assoc .py .py=Python.File
通过这些信息,您可以使用ftype
命令来查看当前与Python.File
文件类型相关联的程序:
> 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命令来设置临时关联,只要连接到系统环境变量,set就会持续。