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
答え2
Kusalanandaが言ったように、特別に他のPythonを指すようにコードを変更せずにそれを使用する/mydir/mybins/python
方法を知りたいですか?/usr/bin/python
その場所にシンボリックリンクを削除して作成するだけ/mydir/mybins/python
です。/usr/bin/python
私強くこれはお勧めできませんが、スクリプトでハッシュバンを変更することをお勧めします。