[英]Shebang Notation: Python Scripts on Windows and Linux?
我有一些用 Python 编写的小型实用程序脚本,我希望它们可以在 Windows 和 Linux 上使用。 我想避免显式调用 Python 解释器。 有没有一种简单的方法可以将 shebang 符号指向 Windows 和 Linux 上的正确位置? 如果没有,是否有另一种方法允许在 Windows 和 Linux 上隐式调用 Python 解释器,而无需在操作系统之间传输时修改脚本?
编辑:Cygwin 提供了 Windows 上的 shebang 支持,但我想在 Windows 上使用本机 Windows Python 解释器,而不是 Cygwin 解释器。
编辑#2:似乎shebang符号覆盖了Cygwin终端中的文件关联。 我想我可以卸载 Cygwin Python 并将 /usr/bin/python 符号链接到 Windows 原生 Python。
阅读文档中的Python Launcher for Windows ,最初在PEP 397 中进行了描述。 它允许您在“py.ini”中定义自定义shebang配置(例如使用pypy),并且开箱即用您可以使用虚拟shebang,例如#!/usr/bin/env python3
,或具有真实路径的shebang,例如#!"C:\\Python33\\python.exe"
。 (包含空格的路径需要引用。)您还可以向 shebang 添加命令行选项。 例如,以下shebang 添加了在脚本终止后进入交互模式的选项: #!/usr/bin/python3 -i
。
安装程序将 .py(控制台)和 .pyw(GUI)脚本文件类型与分别命名的启动器 py.exe 和 pyw.exe 相关联,以便在 Windows 中启用对脚本的 shebang 支持。 对于所有用户安装,启动器安装到 Windows 文件夹(即%SystemRoot%
)。 对于每用户安装,您可能需要手动将安装目录添加到PATH
以在 shell (*) 中使用 py.exe。 然后,您可以从命令行通过py -2
、 py -3
、 py -2.6
、 py -3.3-32
(32 位)等运行 Python。 当与-m
结合使用特定版本的解释器将模块作为脚本运行时,启动器很方便,例如py -3 -m pip install
。
(*) 3.5+ 中的新安装程序默认为“%LocalAppData%\\Programs\\Python\\Launcher”,用于按用户安装启动器,而不是安装在“python.exe”旁边,它会自动将此目录添加到PATH
。
除非您使用 cygwin,否则 windows 不支持 shebang。 但是,当您安装 python 时,它会添加为 .py 文件的文件关联。 如果您只在命令行上输入脚本名称,或者在 Windows 资源管理器中双击它,那么它将通过 python 运行。
我所做的是在我的脚本中包含一个#!/usr/bin/env python
shebang。 这允许在 linux 上支持 shebang。 如果你在安装了 python 的 Windows 机器上运行它,那么文件关联应该在那里,它也会运行。
简短回答:最简单的方法是安装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。
您可以通过点击开始在 Windows 中编辑环境变量,输入env
应该是第一个选项。 只需编辑您的用户路径 var(或所有用户的全局路径)并添加您希望在命令行中可用的任何应用程序。
还为您安装 git 并将其与 Windows 凭据管理器连接起来,使登录 2fa 启用的 svn 服务(如 GitHub 到 bitbucket)变得非常容易,因此您不必生成令牌。
还带有右键单击菜单,可以在任何位置打开 bash,甚至是仅使用 git 的 GUI。
在安装过程中,我建议您告诉它按原样检出并提交为 Unix 行尾,以便对您的 Linux 和 macOS 伙伴友好。 我还推荐了许多其他 git 配置,但这是另一个主题。
另一种选择:安装 WSL(1 not 2) 更好,但需要一些配置。 (更改默认驱动器安装路径,手动连接凭证管理器等可以问我所有这些,如果你想要的话,我建议在 Windows 中运行 Linux 时进行很多调整。)
更灵活地使用 WSL 意味着您可以将所有命令行应用程序的 Linux 版本与 Windows 版本分开。
如果您愿意,它仍然可以运行本机 Windows exe 文件,但如果安装,Linux 二进制文件将优先。
要设置 WSL,请在 Power Shell 中以管理员身份运行此命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
*需要重启
然后在 Microsoft 应用商店中搜索 Linux 并选择一个发行版。 (我推荐 Ubuntu 18LTS)
PS - 你也可以在 git bash 中运行 WSL 😏 哦,如果你碰巧使用 PHP,windows composer.exe 也会使用 shebang 行来运行 WSL。
安装pywin32。 一件好事是它将 *.py 的文件关联设置为 python 解释器。
抱歉打开旧主题。
我创建一个文件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
文件说明:
*.py
文件中获取第一行"#! "
所有 windows python 脚本都必须以 shebang 行作为代码中的第一行开始:
#! c:\Python27\python.exe
要么
#! c:\Python37\python.exe
然后运行它: cmd> py SomePyFile.py param1 param1 paramX
不是与shebang ...但您可能能够设置文件关联,请参阅此SO question它处理Perl以及相关的答案,因为Windows和stdin / out重定向存在已知问题...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.