2017-09-12 9 views
-1

私はちょっとしたプロジェクトに取り組んでいます。 私は仮想環境で働いているので、私は私のスクリプトの先頭にシェバングを持って、このFlask仮想環境:悪いインタプリタ:そのようなファイルやディレクトリがありません

#!flask/bin/python 

のように見えること私はコマンドラインから私のスクリプトを実行しようとすると、私は次のエラーを取得します:

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

私は、これはPythonインタプリタが見つからなかったことを意味していることを知っているが、私はフラスコ/ビンに移動した場合、私は内部のインタプリタを見ることができます。これらは、私は私の仮想環境のディレクトリを削除して再度作成しようとしました

activate
activate.csh
activate.fish
activate_this.py
easy_install
easy_install-2.7
pip
pip2
pip2.7
python
python-config
python2 -> python
python2.7 -> python
wheel

フラスコ/ビンの内側のすべてのファイルですが、これは助けにはなりませんでした。

この場合、私のシバンはなぜ機能しないのですか?

+1

実行しようとしているスクリプトに実際の送料がありますか? – pvg

+1

実際のrun.pyファイルを表示してください。 –

+0

unix SEで[shebang line not working with cr-lf](https://unix.stackexchange.com/questions/108588/shebang-line-not-working-with-cr-lf)を参照してください。 –

答えて

0

スクリプトをWindows環境で作成し、それをUNIX環境に移動しましたか?行末が異なるため、ある環境で書かれたファイルは自動的には別の環境で動作しません。詳細はhereを参照してください。

これを解決するには、dos2unixを使用するか、WindowsでNotepad ++のようなものを使用している場合は、ファイルをWindows形式で保存するオプションがよくあります。

+0

ありがとうございます!それが助けになりました。sedの解決策が機能しなかったので、私はperl [here](https://stackoverflow.com/questions/6373888/converting-newline-formatting-from-mac-to-windows)でコマンドラインソリューションを見つけました。 – nieka

-1

フラスコ/ bin/python^MはあなたのファイルがWindowsで書かれ、UNIXで実行されたからですか?

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

bashはshebang行を無視します(これはbashのコメントです)。代わりに、シバン行はUnixプログラムローダーによって処理されます。実行可能ファイルの最初の2つの文字は、プログラムローダシステム固有の限界まで改行文字のための先行

  • スキャンし、#!ある場合。 Linuxの場合、この制限は127文字です。
  • 行末から末尾の空白を切り捨てます。これを行うためのLinuxカーネルコードは、binfmt_script.cの46行目から56行目です。この文脈では、改行は空白ではありません。
  • 先頭に続く#!の後に最初の非空白文字で始まるインタープリタの名前を探します。
  • スクリプト名を引数として、指定されたインタプリタを実行しようとします。要するに

、プログラムローダはpython^Mいうよりflask/binpythonという名前のファイルを探しています。そのファイルは存在しません。

直接解決策は、スクリプトに対してdos2unixを実行することです。長期的な解決策は、Windowsツールを使用してUnixマシンの対象となるファイルを作成することではありません。

関連する問題