1

一連のPythonプログラムが与えられた場合:

/tool/a.py
/tool/b.py
/tool/c.py
/tool/d.py
...

共有ネットワークディレクトリに保存され、混合環境(Solarisおよびさまざまな種類のLinux)で実行され、ユーザーの$ PATHに含まれておらず、同じ場所にインストールされていない可能性のある特定のPythonバージョンが必要です。さまざまな種類のマシン。

プログラムはどのPythonインタープリターを使用するかをどのように指定できますか?

私が検討した代替案:

  1. 現在のタイプのマシンに適切なPythonインタープリターを起動するPythonラッパーを参照する各Pythonプログラムのシバン。ただし、execveでは、ラッパー実行可能ファイルをシェルスクリプトとして実装することはできません。また、各マシンのネイティブ実行可能ファイルをコンパイルするには、多くのメンテナンスが必要になります。

  2. Pythonプログラムごとに起動シェルスクリプトを作成します。すべてのシェルスクリプトは、Pythonインタープリターを選択するための同じロジックを共有する場合がありますが、可能であれば、Pythonプログラムごとに個別のシェルスクリプトを使用することは避けたいと思います。

  3. 次のように、シェルスクリプトとPythonプログラムの両方として各プログラムを実行できるようにするために、ある種のハックを作成します。

"""exec" /tool/python_wrapper "$0" "$@" """#"
def foo():
print "foo"
foo()

他にアイデアはありますか?

4

4 に答える 4

4

これがあなたが探している答えではないことは知っていますが、Python実行可能ファイルがにあることを確認してから、それらを見つけるためPATHに使用envします。長期的には、これによりメンテナンスや頭痛の種が大幅に減ると思います。例えば

#!/usr/bin/env python2.5
print "Hello from python 2.5!"

 

#!/usr/bin/env python2.6
print "Hello from python 2.6!"

 

#!/usr/bin/env python2.7
print "Hello from python 2.7!"
于 2011-06-09T19:34:50.173 に答える
1

オプション3を使用します。起動の遅延はわずかですが、最も柔軟なオプションです。

  1. 混合環境で実行しているため、すべてを正しく設定するのは悪夢です。

  2. 動作しますが、あなたが言ったように、.pyプログラムとシェルスクリプトの両方を維持する必要があります。また、3と大差ありません。

于 2011-06-09T19:29:49.067 に答える
1

オプション#1を実行envし、インタープリターの制限を回避するために使用します。Pythonはすでにバージョン固有のバイナリを作成している可能性があることに注意してください/usr/bin(私のシステムでは作成しました)。

#!/usr/bin/env python2.4

または

#!/usr/bin/env python2.6
于 2011-06-09T19:36:01.443 に答える
1

Pythonバイナリに.pyファイルパラメータを指定することで、Pythonインタプリタを直接強制できます。

python2.6 /tool/a.py

python2.4 /tool/b.py

virtualenvを使用するツールごとに、さまざまなPython環境とさまざまな依存関係(Pythonの卵またはネイティブ拡張機能)を維持するには、次のようにします。

http://pypi.python.org/pypi/virtualenv

于 2011-06-09T19:45:12.407 に答える