9

我需要为要使用特定 python 版本执行的 .py 文件设置关联。但我只需要为单个 cmd.exe 会话建立这种关联(并行会话不应该受到影响)。Windows 允许这样做吗?

我怀疑答案是否定的,但在放弃将此类功能引入virtualenv的想法之前,我希望看到一些证据。

4

4 回答 4

8

你当然可以。您在对雅各布的回答的评论中非常接近回答 -

如果可以更改与环境变量的文件关联 - 它会有所帮助,但似乎不可能。

有可能的。您所要做的就是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 时将使用哪些环境变量?

于 2011-09-01T19:17:33.663 回答
3

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

于 2011-04-07T19:50:43.030 回答
1

您最好的选择可能是在脚本中设置 PATH 变量并通过编写python script.py. 文件关联是全局的并且在进程之间共享。环境变量是进程的本地变量,这就是我建议这个解决方案的原因。

于 2011-04-08T06:15:40.903 回答
0

您可以使用 windows set 命令设置临时关联,除非附加到系统环境变量,否则 set 将持续与 shell 一样长。

于 2011-04-07T14:56:52.027 回答