在Windows上使用#!/ usr / bin / env python3 shebang

时间:2019-01-02 16:20:16

标签: python windows shebang

我正在尝试在Windows上作为命令从命令行运行Python脚本-因此不使用“ Python”或“ .py”。如果我的脚本名为“ testing.py”,则尝试将其命名为命令并从命令行调用“ testing”。

遍历文档似乎只要我的PATH中有Python,就需要使用该shebang #!/usr/bin/env python

https://docs.python.org/3/using/windows.html#shebang-lines

我的PATH中也有脚本文件夹,所以类似 “ testing.py”当前正在命令行中运行。

根据文档和本教程, https://dbader.org/blog/how-to-make-command-line-commands-with-python

如果我在PATH和上面的shebang中具有正确的路径,我应该能够通过“测试”来唤起我的Python脚本。但是,如果不添加“ .py”,我似乎无法运行脚本。

4 个答案:

答案 0 :(得分:2)

否,Windows不支持shebang行。

您链接的文档与Python安装的py启动器相关,该启动器可以解释各种shebang行以选择运行脚本的Python版本。

setuptools能够为您的Python脚本but it gets a little involved生成包装器.exe,并且已经假定您拥有一个带有setup.py的程序包,依此类推。

在本地,如果确实确实需要,则可以将.py添加到PATHEXT environment variable,因此Windows命令行查找.py看起来像.exe(以及其他各种字符;当前的现代默认值为.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC)。但是,这自然不会扩展到分发应用程序,因为您的所有用户也需要进行设置。

我的建议是,确实坚持那种无聊的旧python testing.py

答案 1 :(得分:2)

@AKX接受的答案在Windows 10上是错误的,如果不是更早版本,则肯定是在最新的Windows 10(1903)中。

我安装了多个版本的Python(2.7、3.6、3.7和最近的Python 3.8b1)。多年来,我一直在自己的脚本中使用#!/usr/bin/env shebang来实现跨平台兼容性(通常是为了区分Py2与Py3脚本)。

我已经在文件夹(C:\so_test\awtest.py)中创建了一个小脚本:

#!/usr/bin/env python3.6
import sys
print(sys.version)

如果我使用awtest.py或仅使用awtest运行此程序,则会收到3.6.x的报告(表明它在Python 3.6上运行)。如果将shebang更改为参考3.7,则会收到3.7.x的报告。如果我将shebang更改为#!/usr/bin/env python3,则会安装最新版本的Python(3.8)。

现在,如果我将该文件夹添加到我要在其中进行测试的命令窗口(path=%PATH%;C:\so_test或主环境变量中,请将该路径添加到路径中(尽管这样做,您需要重新启动命令窗口) )),我可以切换到其他目录并运行awtestawtest.py,它们仍然可以工作并引用路径中的文件夹。如果我从路径中删除脚本文件夹,将不再找到这些文件。

虽然我不一定希望它可以在Windows 10或Python 2.7之前的版本上运行,但这种功能似乎是前进的方式。

答案 2 :(得分:1)

您可以在Windows中使用shebang,方法是将解释器的路径设置为文件的第一行(您将在VSCode上看到一个标记,该标记在该行上显示“设置为解释器”)。 使用Windows 10,Python版本3.9参见示例:

#!C:/Users/waithira/AppData/Local/Programs/Python/Python39/python.exe 
print('hello world')

答案 3 :(得分:0)

如果您不打算经常这样做。您仍然可以将批处理文件添加到路径 testing.bat 中,其中包含执行代码所需的命令。

@echo off
python testing.py

这是一个无聊的解决方法,但它无需提及扩展即可工作,因为 Windows 解释批处理文件的方式与解释可执行文件的方式相同。