2011-08-03 12 views
1

カプセル化されたデザインに起因する問題があります。これまで多くのスクリプトがbashで書かれていたため、#!/bin/bashは常にシンプルでした。#!でPythonのバージョンを特定する方法環境変数を使用する

しかし、ここではPythonでスクリプトを書き直していますが、もう少し難しいです。私たちはPythonの特定のバージョンを提供しています(クライアントのインストール環境におけるバージョンの違いを避けるため)。 pythonの特定のバージョンは、インストールされたディレクトリ構造の中に存在するので、私はそれにルーティングする必要があります。

しかし、私は#とは思わない!文はファイルを実行するシェルからの環境変数を受け入れることができます(試してみると悪いインタプリタを取得します)。

例:foo.py

私は、ファイルを実行すると悪い通訳を得たbashシェルでは#!$dirloc/wherepythonlives/python

を持っています。 環境変数をその#!行に没入させる方法はありますか?

明示的なパスに依存する必要がありますか?私たちは複数のバージョンのソフトウェア(複数のPythonバージョンを意味する可能性があります)を1つの環境でサポートしたいので、Pythonの!#ステートメントをインストールするディレクトリレベルの中に何とかしておきたいと考えていました。

#!/usr/bin/env python 

これはenvpythonと呼ばれるバイナリのためのPATH環境に沿って見えるようになります:

+0

あなたもちょうど$ DIRLOC/wherepythonlives/pythonのfoo.py呼び出すのではなく、直接スクリプトを実行するshスクリプトを書くことができます。 –

答えて

5

これを行うための一般的な方法は、envプログラムを使用することです。

+0

これは設定ファイルを使用した後に動作し、パス変数を変更する必要があります。 – Malforus

0

このジレンマの最適な解決策は、distutils(setup.py、適切なスタブを自動的に、与えられたいくつかの "コンソールエントリーポイント"のために作成する)とvirtualenv( "分離された複数のインストール" )。

1

私はシバンで環境変数を使用できることに気づいていません。 あなたが常に特定のバージョンを使用するように指定するには、ENVを使用することができます:あなたは

#! ../../usr/bin/python 

編集ものの、相対パスを使用することができます。そのバージョンが$ PATHで見つけることができるならば、スクリプトが

#! /usr/bin/env python2.7 

を失敗するか、またはあなたは、エントリではなく、一般的なスクリプトを指して作ることができそうでない場合に使用されます。

例えば

#! /usr/bin/env bash 

if [[ $MYPYTHON ]] 
then 
    $MYPYTHON main.py 
else 
    echo error message 
fi 
0

私はそれがすべてあなたのスクリプトが呼び出されますどのように、どのような環境に依存すると仮定します。 #!/usr/bin/env pythonを使用してスクリプトを呼び出すことができます。これは、環境のPATHを操作して使用するPythonを制御できるようにします。

FOO:

は、あなたは、常にスクリプトの場所にPythonの実行ファイルの相対を実行するインタープリタとして、ラッパースクリプトを指定することができます。PY:

#!/bin/pyselector 

import sys 
sys.exit(0) 

pyselector:

#!/bin/sh 
SCRIPT_PATH="$(readlink -f $1)" 
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" 

"${SCRIPT_DIR}/my/local/python" "[email protected]" 
関連する問題