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

dsi*_*cha 60 python linux windows 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.

Ery*_*Sun 36

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

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

如果你只使用Python 2,还有一个可以单独安装的pylauncher版本.


Spe*_*bun 32

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

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

  • 当您的脚本与所述python版本不兼容时,问题就开始了.一些发行版(例如:ArchLinux)用python3链接python.至少指定主要版本号通常是个好主意:'#!/ usr/bin/env python2'.也许你的脚本只适用于2.7,因为你使用的东西只存在于所述版本中. (8认同)
  • 包含python版本号很好."python"在每个发行版中都没有链接到"python2.7". (5认同)
  • 我的观点是,那个并不总是正确的.特别是在分发脚本时. (3认同)
  • 不赞成投票,因为这是答案已过时:Windows现在可以识别Python文件的shebang行。 (2认同)

Chr*_*s J 0

不是用shebang...但你也许能够建立一个文件关联,请参阅这个SO问题,它涉及Perl和相关的答案,这也将是相关的,因为Windows和stdin/out重定向存在已知问题...