環境変数を取得せずに仮想環境を有効にする

環境変数を取得せずに仮想環境を有効にする

一晩中複数のPython管理コマンドを実行するbashスクリプトを作成しようとしています。

環境変数を取得するにはvirtualenvが必要であるという他の記事を読みましたが、sourceコマンドを追加した後もまだ機能しません。

#!/bin/bash
source /home/DDiran/.virtualenvs/envname/bin/activate && cd 
/home/DDiran/projectdir/ && python manage.py randomize_product_order && 
python manage.py update_product_prices

問題のvarは$PRODUCTION_ENVであり、結果は空です(pythonが発生しますKeyError: None)。

私は何が間違っていたのですか?

編集する

@Romeo Ninovの要求に応じて、内容は次のとおりですbin/activatehttps://pastebin.com/7yAbZxrX

bin/postactivateどの設定の直後に環境変数を実行するように設定したいですか?bin/activateこれは通常、virtualenv アクティベーションがどのように機能するかです。

答え1

さらなる調査の最後に、2つの異なる解決策が見つかりました。後で同様の問題が発生する人のためにここに投稿します。

ソリューション#1

~によるとAskUbuntuに関するこの記事、実際のスクリプト自体をインポートする必要があるため、次のことをしないでください。

bash myscript.sh

次のようにする必要があります。

source myscript.sh

なぜこれが起こるのかについての詳細な説明は上記のリンクにあります。

ソリューション#2

はるかに簡単です。仮想環境を有効にして実行する代わりに:

python manage.py my_command

以下を実行するだけです。

/path/to/virtual/env/bin/python manage.py my_command

これにより、仮想環境のアクティブ化をまったく心配する必要がなくなり、virtualenvで設定した環境変数はそのまま残ります。

関連情報