【问题标题】:Python script: problems with shebang line (unix)Python 脚本:shebang 行(unix)的问题
【发布时间】:2016-07-20 22:00:45
【问题描述】:

我正在尝试通过在本地服务器上启动一个测试应用程序来感受 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 不是很了解,并且尝试过查找正在发生的事情,但是有类似问题的人的解决方案对我不起作用;幕后发生了什么我不理解的事情吗?

【问题讨论】:

  • 在 bash 提示符下,运行 type python 并报告结果。
  • @John1024 type python 的结果产生结果:python is hashed (/usr/bin/python)
  • 那就试试#!/usr/bin/python
  • @John1024 我已经这样做了,它也不起作用;我认为这是指安装我的系统范围的 python 解释器的地方。按照教程,我使用了virtualenv
  • 你可以试试sed -n l app.py 吗?用于显示不可见字符

标签: python bash shebang


【解决方案1】:

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

【讨论】:

  • 如果您不知道您正在使用的解释器的实际路径(如果您的假设不正确),请尝试在您运行的任何代码中检查 sys.executable
  • 谢谢,问题已解决。我没有意识到我需要完整的路径来调用我在虚拟环境中设置的解释器。我现在正在处理 Flask 的一个单独问题,但我会花一些时间来研究它。再次感谢
【解决方案2】:

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

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

Python 脚本的标准 shebang 行是

#!/usr/bin/env python

#!/usr/bin/python

【讨论】:

  • 感谢pwd 上的信息。不幸的是,当我尝试which python 时,它显示了我的系统范围的python 解释器的安装位置。对于flask 教程,我使用了virtualenv
【解决方案3】:

我在尝试将 python 脚本设置为可执行文件以测试某些东西时遇到了类似的问题,我意识到 bash 的阻碍远大于它的帮助。我最终设置了 pyinstaller(这非常简单),然后让我的脚本成为一个独立的可执行文件,而不需要 bash。

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

apt-get install build-essential python-dev
(或 yum 等...取决于您的操作系统)

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

就是这样。运行:pyinstaller --onefile myapp.py(如果您的操作系统需要 exe,则为 pyinstaller.exe)

如果成功(通常是成功的),您的新可执行文件将位于您运行 pysinstaller 的同一区域的“Dist”文件夹中。

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多