Flask虚拟环境:糟糕的解释器:没有这样的文件或目录

时间:2017-09-12 11:53:19

标签: python flask virtualenv

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

#!flask/bin/python

当我尝试从命令行执行脚本时,出现以下错误:

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

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

  

激活
  activate.csh
  activate.fish
  activate_this.py
  easy_install的
  easy_install的-2.7
  点子
  PIP2
  pip2.7
  蟒蛇
  蟒蛇,配置
  python2 - >蟒蛇
  python2.7 - >蟒蛇
  轮子

我尝试删除我的虚拟环境目录并再次创建它,但这没有帮助。

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

3 个答案:

答案 0 :(得分:0)

-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中寻找名为python而不是flask/bin的文件。该文件不存在。

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

答案 1 :(得分:0)

您是否在Windows环境中编写脚本然后将其移至UNIX环境?由于行结尾不同,因此在一个环境中编写的文件不会自动在另一个环境中工作。有关详细信息,请参阅here

要解决此问题,请尝试使用dos2unix,或者如果您在Windows上使用类似Notepad ++的内容,通常会选择以Windows格式保存文件。

答案 2 :(得分:-1)

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