Shebang表示法:Windows和Linux上的Python脚本?

时间:2011-09-27 19:11:48

标签: python windows linux shebang

我有一些用Python编写的小实用程序脚本,我想在Windows和Linux上都可以使用。我想避免显式调用Python解释器。有没有一种简单的方法可以将shebang符号指向Windows和Linux上的正确位置?如果没有,是否有另一种方法允许在Windows和Linux上隐式调用Python解释器,而不必在操作系统之间进行转换时修改脚本?

编辑:Windows上的shebang支持是Cygwin提供的,但我想在Windows上使用本机Windows Python解释器,而不是Cygwin。

编辑#2:似乎shebang符号覆盖了Cygwin终端中的文件关联。我想我可以将Cygwin Python和symlink / usr / bin / python卸载到Windows原生Python。

6 个答案:

答案 0 :(得分:32)

除非你使用cygwin,否则windows没有shebang支持。但是,当您安装python时,它会添加.py文件的文件关联。如果只在命令行中输入脚本名称,或者在Windows资源管理器中双击它,那么它将通过python运行。

我所做的是在我的脚本中加入#!/usr/bin/env python shebang。这允许在Linux上支持shebang。如果你在安装了python的windows机器上运行它,那么文件关联应该在那里,它也会运行。

答案 1 :(得分:31)

阅读文档中的Python Launcher for Windows,最初在PEP 397中进行了描述。它让 你在ini中定义自定义shebang配置(例如使用pypy), 但开箱即用,您可以使用#!/usr/bin/env python3之类的虚拟shebang,或者使用#!"C:\Python33\python.exe"等实际路径的shebangs(包含空格的路径需要引用)。您还可以向shebang添加命令行选项。例如,以下shebang添加了在脚本终止后进入交互模式的选项:#!/usr/bin/python3 -i

Python 3.3将.py(控制台)和.pyw(GUI)脚本文件类型与分别命名的启动器py.exe和pyw.exe相关联,以便为Windows上的脚本启用shebang支持。在为所有用户安装时,新的启动程序将安装到根Windows文件夹(即%SystemRoot%)。否则,您需要将安装目录添加到PATH,以便在shell中使用py.exe。然后,从命令行,您可以运行py -2py -3py -2.6py -3.3-32(32位),依此类推。当与-m结合使用时,启动器很方便将模块作为脚本运行,例如py -3 -m pip install

如果您只使用Python 2,还可以单独安装pylauncher版本。

答案 2 :(得分:1)

安装pywin32。其中一个好处是它将* .py的文件关联设置为python解释器。

答案 3 :(得分:0)

不是shebang ...但你可能能够建立文件关联,请参阅处理Perl的this SO question以及相关的答案,因为已知Windows和stdin / out的问题也是如此重定向...

答案 4 :(得分:0)

很抱歉打开旧主题。

我创建了一个文件py.cmd,并将其放置在C:\Windows\System32文件夹中

py.bat:

@(
@set /p shebang=
)<%1
@set shebang=%shebang:#! =%
@%shebang% %1 %2 %3 %4 %5 %6 %7 %8 %9

py.bat文件说明:

  1. *.py文件中获取第一行
  2. 删除shebang字符"#! "
  3. 使用shebang python路径运行python文件

所有Windows python脚本都必须以shebang行作为代码的第一行:

#! c:\Python27\python.exe

#! c:\Python37\python.exe

然后运行它: cmd> py SomePyFile.py param1 param1 paramX

答案 5 :(得分:0)

简短答案: 最简单的方法是安装git for windows(git bash)并使用shebang行。 #!/usr/bin/env python||anyothercommand

这是我安装在任何计算机上的第一件事,因为谁不想使用bash并且我们都使用git对吗?

更多信息: 与Cygwin不同,git bash使用您的本机Windows应用程序,并允许您使用bash脚本而无需进行任何配置。

它将自动将带有shebang行的任何文件视为可执行文件,并以与bash在Linux上相同的路径运行命令。它还只使用Windows ENV变量,因此添加到从Powershell或cmd运行的任何路径也将适用于git bash。

您可以通过单击开始并键入env来在Windows中编辑环境变量。只需编辑您的用户路径var(或对所有用户使用全局路径),然后在命令行中添加您想要的任何应用程序即可。

还可以安装git并将其与Windows凭据管理器挂钩,并使其非常容易地登录到启用了2fa的svn服务(例如GitHub)到bitbucket,因此您不必生成令牌。

还带有右键单击菜单,可在任何位置甚至仅使用git的GUI打开bash。

在安装过程中,建议您告诉它按原样签出并以Unix行结尾提交,以使其对Linux和macOS伙伴更好。我还建议其他许多git配置,但这是另一个主题。


另一种选择: 安装WSL(1 not 2)更好,但需要一些配置。 (更改默认的驱动器挂载路径,手动连接凭据管理器等会询问我所有有关我建议在Windows中运行Linux的调整的信息。)

更巧妙地使用WSL意味着您可以将所有命令行应用程序的Linux版本与Windows分开。

如果您愿意,它仍然可以运行本机Windows exe文件,但如果安装了Linux二进制文件,则优先。

要设置WSL,请在电源外壳中以管理员身份运行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

*需要重启

然后在Microsoft应用商店中搜索Linux,并选择一个发行版。 (我建议使用Ubuntu 18LTS)

PS-您还可以在git bash内运行WSL?哦,如果碰巧使用PHP,Windows composer.exe也将使用shebang行来运行WSL。