2017-12-12 32 views
0

virtualenvを動的にロードする方法はありますか?Django.fcgiを使った動的な仮想化

#!/home/root/.virtualenvs/production/bin/python 

import os, sys 
... 

私は、フォルダ名はstagingまたはproduction

ある場合によっては

#!/home/root/.virtualenvs/production/bin/pythonまたは#!/home/root/.virtualenvs/staging/bin/pythonするパスが欲しい私は、フォルダ名をこのように得ることができます。

_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.insert(0, _PROJECT_DIR) 
sys.path.insert(0, os.path.dirname(_PROJECT_DIR)) 

_FOLDER_NAME = _PROJECT_DIR.split('/')[-1] 

しかし、これに基づいて動的な方法でvirtualenvをロードできるかどうかはわかりません。

これはデプロイメント上の問題です。ステージング環境では、実稼動のためにハードコードされているため、パスを置き換える必要があります。

答えて

1

なぜ使用しないのですかenv

#!/usr/bin/env python 

そして、適切な環境からアプリケーションを実行しますか?

+0

私はそれが何をしているのかよく分かりません。 'python'バイナリは、私が動いているvirtualenvに応じて動的に変更するのですか? 'source〜/ .virtualenvs/staging/bin/activate'を実行するときのように、'/usr/bin/env python'は 'staging' virtualenvから実行可能なpythonでしょうか? – Vadorequest

+1

'env'は、あなたが働いている環境(' $ PATH'環境変数に依存します)に従って、適切なPythonインタプリタを取り出して起動することを可能にします。 これは、システム上のインタープリタのパスが不明な場合にスクリプトでよく使用されます。 – vmonteco

+1

次に、virtualenvからスクリプトを起動しない場合は、システムのインタプリタを使用する必要があります。また、virtualenvから起動する場合は、このvirtualenvのインタプリタを使用する必要があります。 – vmonteco

関連する問題