Python 脚本:shebang 行问题 (unix)

Python script: problems with shebang line (unix)

我试图通过向本地服务器启动测试应用程序来感受 Flask 微框架。在尝试 运行 我的代码 app.py 时,我不断收到错误消息:

-bash: ./app.py: /flask/bin/python: bad interpreter: No such file or directory

这是 app.py 的基本代码 (taken from here),它位于我的 todo-api 目录中:

#!/flask/bin/python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

我检查了 python 解释器的文件路径,它应该存在:

:bin $ pwd python

Users/me/Documents/Python/todo-api/flask/bin

我已经按照教程上T了;我尝试将 shebang 行更改为:

#!/flask/bin/python2.x
#!flask/bin/python
#!/flask/bin/env python

但无济于事。我对 bash 不太了解,并尝试查找正在发生的事情,但是对有类似问题的人的解决方案对我没有用;幕后发生了什么我不理解的事吗?

pwd 告诉你当前目录。它不会告诉您命令所在的位置。该命令的输出是一条红鲱鱼。

您可能正在寻找 which python。将该路径放入您的 shebang 行中。请注意,这将为您提供来自 $PATH 的 Python 解释器,它可能是正确的,也可能不是正确的。

Python 脚本的标准 shebang 行是

#!/usr/bin/env python

#!/usr/bin/python

Bash shebangs 期望解释器的绝对路径。因此,在您的情况下,您需要指定 Python 解释器的完整路径,即:

#!/Users/me/Documents/Python/todo-api/flask/bin

您可能想要研究 /usr/bin/env python 的使用,以便能够使用您用户的 $PATH 环境变量中可用的解释器。参见 https://unix.stackexchange.com/questions/12736/how-does-usr-bin-env-know-which-program-to-use/12751#12751

我在尝试将 python 脚本设置为可执行文件以测试某些内容时遇到了类似的问题,我意识到 bash 的阻碍多于它的帮助。我最终设置了 pyinstaller(这非常简单),然后使我的脚本成为一个独立的可执行文件,而没有 bash 在混合中。

这是我所做的(只需要几分钟,没有配置): 第一的; pyinstaller 需要:build-essential & python-dev

apt-get install build-essential python-dev
(或 yum 等...取决于您的 OS)

然后使用内置的 python 包管理器来设置 pyinstaller: pip 安装 pyinstaller

就是这样。 运行: pyinstaller --onefile myapp.py (或者 pyinstaller.exe 如果你的 OS 需要 exe)

如果成功(通常是这样),您的新可执行文件将位于您 运行 pysinstaller 所在区域的文件夹 "Dist" 中。