这两个Shebang行为什么都兼容?

1 投票
1 回答
1003 浏览
提问于 2025-04-18 12:14

我刚开始学习编程和Python。

我正在使用Flask框架来写一个应用,教程里提到我应该在运行文件时加上一个shebang行来调用虚拟环境:

run.py:

#!flask/bin/python

from app_folder import app
app.run(debug = True)

不过,在我的__init__.py文件里有一个不同的shebang行:

#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)
from app_folder import views

当我运行run.py文件时,这两个shebang行似乎没有什么关系——这是为什么呢?我以为它们必须是一样的,因为我觉得不同的话会调用不同版本的程序。

1 个回答

4

第二个shebang(也就是文件开头的那行)会被忽略。只有在命令行中指定的文件的shebang行会被用来找到可以执行的程序。

然后,系统会把这个文件交给 flask/bin/python。对于Python来说,shebang行就只是一些注释而已。

__init__.py 文件中的shebang行可能不会起作用;你不能在一个包里面运行一个模块,还指望能继续使用这个包的其他部分;除非你使用 -m 这个选项,否则脚本总是作为 __main__ 来运行(如果你使用了这个选项,可能你还需要在你的包里有一个 __main__.py 文件)。

撰写回答