2017-05-19 128 views
2

pythonスクリプトをpyenvvirtualenvから実行すると、ファイルの正しいシバンは何ですか?pythonスクリプトで使用するshebangをpyenv virtualenvで実行する

私のシステム(OSX)のデフォルトのpythonにはpandasがインストールされていません。 pyenv virtualenv venv_nameはそうです。私は、virtualenvからpython実行ファイルのパスを取得しようとしました。

$ pyenv activate venv_name 
(venv_name)$ which python 
/Users/username/.pyenv/shims/python 


だから私は、私の例script.py製:

#!/Users/username/.pyenv/shims/python 
import pandas as pd 
print 'success' 


をしかし、私はスクリプトを実行しようとしたとき、私はエラーだ:それを実行しているが、

(venv_name) $ ./script.py 
./script.py: line 2: import: command not found 
./script.py: line 3: print: command not found 


をコマンドラインのパスは正常に動作します:

(venv_name) $ /Users/username/.pyenv/shims/python script.py 
success 

(venv_name) $ python script.py # also works 
success 

これに適したシバンは何ですか?理想的には、私は現在のvenvが何であれ、Pythonを指すように一般的なものを必要とします。

+0

私はこれをたくさん使っていて、うまく動作します。 '#!/ home/dslima90/.virtualenvs/production_enviroment/bin/python'という、うまく動作する私のシバンの一例は、おそらくあなたのパスをチェックしますか?ビンがなくなっていませんか? – DSLima90

+0

しかし、あなたの現在の環境を指し示すことを望むなら、 '#! Python'? – DSLima90

+0

@ DSLima90最後の例は、スクリプトを直接実行する際にパスが正常に動作することを示しています。私は '#! python:エラー: '-bash:./script.py:python:悪いインタプリタ:そのようなファイルやディレクトリはありません ' – xgord

答えて

5

完全なパスでインタープリタを呼び出すのがうまくいかない理由は分かりませんが、私はいつも使っていますが、自分の環境にあるPythonインタプリタを使いたい場合は、

#!/usr/bin/env python 

あなたの環境でPythonインタプリタを使用するように検索します。

1

#!シバンラインよりも多くのシェルを使用する必要がある場合は、同じファイルでPythonを起動する簡単なシェルスクリプトでファイルを開始できます。そのため引用の

#!/bin/bash 
"exec" "pyenv" "exec" "python" "$0" "[email protected]" 
# the rest of your Python script can be written below 

は、Pythonは最初の行を実行し、代わりにそれを効果的に無視するモジュールのドキュメンテーション文字列...のために一緒に文字列を結合していません。

詳しくはhereをご覧ください。

関連する問題