我需要为.py文件设置关联以使用特定的python版本执行。但我需要仅为单个cmd.exe会话建立此关联(并行会话不应受影响)。 Windows是否允许这样做?
我怀疑答案是否定的,但是我希望看到一些证据,然后再将这个功能转化为virtualenv。
答案 0 :(得分:8)
当然可以。你对雅各布答案的评论非常接近回答 -
如果可以更改文件与环境的关联 变量 - 它会有所帮助,但似乎不可能。
有可能。您所要做的就是在密钥的值中使用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兼容启动器。看到 P http://www.python.org/dev/peps/pep-0397/, 用于截屏视频的http://www.red-dove.com/screencasts/launcher/launcher.html
如果将 .py 扩展名添加到 PATHEXT 环境变量,您甚至可以跳过它。请参阅问题What environment variables will be used when calling an EXE from command line?
答案 1 :(得分:3)
在Windows中,您可以使用assoc
和ftype
命令从命令行更改文件关联(您当前可以从{{3)下载 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
会话之前将其恢复。
答案 2 :(得分:1)
您最好的选择可能是在脚本中设置PATH变量并通过编写python script.py
来调用python。文件关联是全局的,并在进程之间共享。环境变量是流程的本地变量,这就是我建议这个解决方案的原因。
答案 3 :(得分:0)
您可以使用windows set命令设置临时关联,只要shell执行,set就会持续,除非附加到系统环境变量。