質問は、 virtualenvwrapper のシェルセットアップ、 virtualenv ( python guide )の拡張についてです。
同様の質問が何度も聞かれましたが、答えは異なります。
いくつかの可能なオプションを考慮して、環境セットアップと関数定義スクリプトをトリガーする「最良の」方法はどれですか。
"シェル起動ファイル(.bashrc、.profileなど)に3行を追加して、仮想環境が存在する場所を設定します"
利用可能なオプションを検討する前に、可能な「ユースケース」を検討することが重要です。
Xグラフィカルログインをサポートするために、パスを設定する唯一の方法は、〜/ .profileを介して、ソースを/ etc/gdm/Xsession、後/ etc/profile
これはパスと環境の設定に最適な場所ですが、virtualenvwrapper関数を正しく定義できません( "workon")
その理由は、XsessionがPOSIX/ bin/shシェルで実行され、virtualenvwrapperでサポートされていないためです (bash、zsh、ksh support )
一部のディストリビューションはdashをPOSIXシェルとして採用しましたが、他のディストリビューションは依然としてPOSIXモードのbash呼び出しに依存しています。
見る
非bash/zsh/ksh除外の場合。
Xログインでは、(手動)環境設定に〜/ .profileを使用すると機能します。
export WORKON_HOME=~/.virtualenvs
export ENV_NAME='myvirtualenv'
export VIRTUAL_ENV="$WORKON_HOME/$ENV_NAME"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset PYTHON_HOME
virtualenvwrapper関数の定義は機能しません。
source `which virtualenvwrapper.sh`
別の方法として、すべてを〜/ bashrcに入れることもできます。
export WORKON_HOME=~/.virtualenvs
export ENV_NAME='myvirtualenv'
source `which virtualenvwrapper.sh`
workon $ENV_NAME
しかし、これも機能しません:
例:
より良いオプションは、混合ソリューションである可能性があります(それほどクールではありません...)
〜/ .profileでは、手動環境設定
export WORKON_HOME=~/.virtualenvs
export ENV_NAME='myvirtualenv'
export VIRTUAL_ENV="$WORKON_HOME/$ENV_NAME"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset PYTHON_HOME
〜/ .bash_profileまたは〜/ .zprofileに、POSIXプロファイルを含めますおよび関数の定義:
[ -f ~/.profile ] && source ~/.profile
[ -f `which virtualenvwrapper.sh` ] && source `which virtualenvwrapper.sh`
Gnome-terminalで、 "login-Shell"オプションを有効にすると、 "workon"関数は定義されています。
リモート実行の場合、次の方法でプロファイルの組み込みをトリガーできます。
ssh localhost bash --login -c env
たぶん、systemdとcronの呼び出しに対して同様のことができるでしょう。
見る:
この構成はすべて見苦しく、保守が困難です。より良い解決策は可能ですか?
しかし、結局のところ、virtualenvがグローバルでアクティブである必要があるのはなぜですかgnome-Shellコンテキスト?
これは確かにすべてを壊しますシステムレベル pythonインストールされたアプリケーション。
したがって、only virtualenvアプリケーションを開始する安全な方法は、ターミナルシェルから開始することです。
おそらく、〜/ .bash_profile〜/ .zprofileでactivate環境を有効にして、login -シェルターミナルのオプション。
〜/ .bashrcを使用する代替設定は、サブシェルで問題を引き起こす可能性があるため、避ける必要があります。
そう、
gnome-Shellからvirtualenvアプリケーションを実行するには、デスクトップファイルは、実行前にenv activateをソースとする専用のラッパースクリプトを実行する必要があります。
一般的なwrapperの場合(Ruby 'bundle exec'およびrvmのものと同様)、見る:
たぶん「再ハッシュ」が必要です...