【问题标题】:How to write shebang when using features of minor versions使用次要版本的功能时如何编写shebang
【发布时间】:2018-02-14 11:30:47
【问题描述】:

例如:

testvar = "test"
print(f"The variable contains \"{testvar}\"")

格式化字符串字面量是在python3.6中引入的

如果我使用#!/usr/bin/env python3,如果安装了旧版本的python,它将引发语法错误。
如果我使用#!/usr/bin/env python3.6,如果没有安装python3.6,它将无法工作,但更新版本是。

我如何确保我的程序在特定版本及更高版本上运行?如果使用python3,我无法检查版本,因为它甚至不会在较低版本上启动。

编辑:

我不是说如何运行它,当然你可以明确地说“用python3.6及更高版本运行它”,但是确保程序只在某个版本上运行的正确方法是什么./scriptname.py时strong>或更新?

【问题讨论】:

  • Shebangs 是字面意思。您需要事先知道您拥有并想要使用的 Python 版本。
  • 如果你要打包这个,你可以在setup.py指定一个详细的需求。我建议不要为此使用shebang。也许在你的脚本中检查sys.version_info,尽管这显然需要脚本首先解析。
  • 链接问题中接受的答案在这里不是很有帮助,但the answer by Gravity Grave 显示了如何访问sys.version_info,这是相关的,恕我直言,它有它适用于所有平台的好处,而不仅仅是 *nix。
  • 语法错误发生在模块“执行”之前的编译时。因此,您无法从 shebang 中检查确切的 Python 版本。
  • 非常好@glenfant。因此你也不能使用sys.version_info,所以我重新打开了这个问题。

标签: python python-3.x posix shebang


【解决方案1】:

您需要将脚本拆分为 2 个模块以避免 SyntaxError:第一个是检查 Python 版本并在 Python 版本不工作时导入应用程序模块的入口点。

# main.py: entry point
import sys

if sys.version_info > (3, 6):
    import app
    app.do_the_job()
else:
    print("You need Python 3.6 or newer. Sorry")
    sys.exit(1)

还有一个:

# app.py
...
def do_the_job():
    ...
    testvar = "test"
    ...
    print(f"The variable contains \"{testvar}\"")

【讨论】:

  • 干得好。我可能会更改 OP 的 f 字符串以避免转义双引号:f'The variable contains "{testvar}"'
猜你喜欢
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2013-09-10
  • 2017-01-05
相关资源
最近更新 更多