【问题标题】:Flask virtual environment: bad interpreter: No such file or directory [duplicate]Flask虚拟环境:错误的解释器:没有这样的文件或目录[重复]
【发布时间】:2017-09-12 11:53:19
【问题描述】:

我正在做一个小项目,这是我第一次使用 Flask。 我正在使用虚拟环境,因此我的脚本开头有一个 shebang,看起来像这样

#!flask/bin/python

当我尝试从命令行执行我的脚本时,我收到以下错误:

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

我知道这意味着找不到 python 解释器,但是如果我导航到 flask/bin,我可以在里面看到解释器。这些都是flask/bin里面的文件

激活
激活.csh
激活.fish
激活this.py
轻松安装
easy_install-2.7

pip2
pip2.7
蟒蛇
蟒蛇配置
python2->python
python2.7 -> 蟒蛇
轮子

我试图删除我的虚拟环境目录并重新创建它,但这没有帮助。

为什么我的 shebang 在这种情况下不起作用?

【问题讨论】:

标签: python flask virtualenv


【解决方案1】:

您是否在 Windows 环境中编写脚本,然后将其转移到 UNIX 环境中?由于行尾不同,在一种环境中编写的文件不会自动在另一种环境中工作。请参阅here 了解更多信息。

要解决此问题,请尝试使用 dos2unix,或者如果您在 Windows 上使用 Notepad++ 之类的工具,通常可以选择将文件保存为 Windows 格式。

【讨论】:

  • 谢谢!这有帮助。我用 perl here 找到了命令行解决方案,因为 sed 解决方案不起作用。
【解决方案2】:
-bash: ./run.py: flask/bin/python^M: bad interpreter: No such file or directory

Bash 忽略了 shebang 行(这是对 bash 的注释)。 shebang 行改为由 Unix 程序加载器处理。如果可执行文件的前两个字符是#!,则程序加载器

  • 向前扫描换行符,直至达到系统特定的限制。对于 Linux,此限制为 127 个字符。
  • 从行尾截断尾随空格。执行此操作的 Linux 内核代码是 binfmt_script.c 的第 46 到 56 行。在这种情况下,回车不是空格。
  • 查找解释器的名称,从前导 #! 之后的第一个非空白字符开始。
  • 尝试使用脚本名称作为参数执行命名解释器。

简而言之,程序加载器正在寻找一个名为python^M 的文件,而不是flask/bin 中的python。该文件不存在。

直接的解决方案是针对您的脚本运行dos2unix。长期的解决方案是不使用 Windows 工具来创建针对 Unix 机器的文件。

【讨论】:

    【解决方案3】:

    flask/bin/python^M,是不是因为你的文件是用windows写的,用unix执行的?

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 2017-08-15
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多