python
デフォルトの実行可能ファイルとは異なる実行可能ファイルで実行されるPythonスクリプトがあります。
/usr/bin
と/mydir/mybins
。
私が実行すると、次のようになります。
$which python
/usr/bin/python
実行中の場合run.py
:
# cat run.py
#!/usr/bin/env /mydir/mybins/python
import os
import sys
print(u"Python executable: %s" % sys.executable)
print(u"From within Python PATH=%s" % os.environ[u"PATH"])
わかりました。
# ./run.py
Python executable: /mydir/mybins/python
From within Python PATH=/usr/bin:... (and no /mydir/mybins)
なぜ?これは意図的に設計されていますか?/usr/bin/python
コードを変更せずにどのように使用できますか?
ベストアンサー1
ユーティリティenv
はその引数をコマンドとして実行します。
パラメータいいえのようなパスが与えられると、env python
コマンドは を探します$PATH
。これは通常、env
スクリプトの-line内で使用するときに必要なものです。#!
引数の場合はいパスが与えられたら、そのパスでコマンドを実行します。
- ラインでは、#!
特定のPythonインタプリタを実行します。絶対に$PATH
検索されません。あなたもそのようなことがあったでしょう。
#!/mydir/mybins/python
なぜなら、そのenv
ビットは実際に何もしないからです。
効果が$PATH
機能するには、次のようにします。
#!/usr/bin/env python
python
これで見つかった最初の実行可能ファイルが使用されます。$PATH
#!
別のアプローチは、コマンドラインで明示的なインタプリタを使用してスクリプトを実行して -line を完全にバイパスすることです。
$ python run.py
または、
$ /usr/bin/python run.py