【问题标题】:using #!/usr/bin/env python3 shebang with Windows在 Windows 中使用 #!/usr/bin/env python3 shebang
【发布时间】:2019-05-29 07:12:19
【问题描述】:

我正在尝试从命令行将 Python 脚本作为 Windows 上的命令运行——因此不使用“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”,我似乎无法让脚本运行。

【问题讨论】:

    标签: python windows shebang


    【解决方案1】:

    @AKX 接受的答案对于 Windows 10 标准 Python 3 是不正确的,如果不是更早的话,肯定是在最新的 Windows 10 (1903) 中。

    (注意:我无法说明这在 WSL 下可能会或可能不会起作用。)

    我安装了多个版本的 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,它们仍然可以工作并引用路径中的文件夹。如果我从路径中删除脚本文件夹,则不再找到这些文件。

    虽然我不一定希望这可以在 10 或 Python 2.7 之前的 Windows 上运行,但此功能似乎是未来的发展方向。

    【讨论】:

    • 这是在 WSL 下还是在普通的 Windows Python 下?
    • 常规 Windows Python(如果不禁用所有其他常规虚拟化,就无法使用 WSL,所以我无法对其进行测试。太糟糕了 - WSL 确实看起来很有趣。)
    • 啊,对。我看了看 - 这是因为 .py 已经与 Py 启动器相关联,它可以以各种创造性的方式解释 shebang 行:docs.python.org/3/using/windows.html#shebang-lines - 此外,为了让 awtest 工作,.py 必须在 @987654335 @ 在您的安装上。
    【解决方案2】:

    不,Windows 不支持 shebang 行。

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

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

    在本地,如果您真的,真的需要这个,您可能可以将.py 添加到PATHEXT environment variable,因此Windows 命令行查找.pys 就像查找@987654329 @s(以及其他各种;当前的现代默认值为.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC)。但是,这自然不会针对分发应用进行扩展,因为您的所有用户也需要进行设置。

    我的建议是坚持使用那个无聊的老python testing.py,真的。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        @echo off
        python testing.py
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-29
          • 2011-12-01
          • 2017-10-03
          • 1970-01-01
          • 2014-05-05
          • 2021-01-29
          • 1970-01-01
          • 2020-04-30
          相关资源
          最近更新 更多