Virtualenvは、新しい仮想環境を作成するときに--no-site-packages
引数が渡されない場合、/usr/local/lib/python2.7/site-packages
(Python 2.7)の場合)のパッケージを新しく-作成された仮想環境。Ubuntu12.04LTSには、Python 2.7パッケージをインストールできる3つの場所があります(デフォルトのUbuntu提供のPython 2.7インストールを使用) :
/usr/lib/python2.7/dist-packages
:これには、ipython、scipy、numpy、matplotlibのグローバルインストールが含まれています。これらのパッケージは、 scipyスタック 。/usr/local/lib/python2.7/site-packages
:これは空です。ソースからパッケージをインストールしない限り、Ubuntuではそのままであると思います。/usr/local/lib/python2.7/dist-packages
:これには、天文学にとって非常に重要なローカルパッケージ、特にPyRAF、STScIなどに関連するパッケージがあり、個別にインストールするのは非常に難しく、時間がかかります。/usr/lib/python2.7/site-packages
などのグローバルディレクトリがシステムに存在しないことに注意してください。また、ipython、scipyなどをグローバルにインストールすると、仮想環境をソース/アクティブ化することなく、これらのパッケージをオンザフライで使用できることにも注意してください。毎回。
当然のことながら、virtualenvを使用して、ユーザーのホームディレクトリに1つの仮想環境を作成し、将来のプロジェクトのためにソース/アクティブ化します。ただし、この仮想環境を作成するときに、上記のリストの場所(1)と(3)にあるすべてのパッケージをリンク/コピーしたいと思います。これの主な理由は、ipython、scipy、astro-packagesなどを再インストールするためにpip install
プロセス(可能であれば)を実行したくないということです(そしておそらく他の)仮想環境。
これが私の質問です:
dist-packages
ディレクトリ内のパッケージをリンク/コピーするようにvirtualenvに指定する方法はありますか?dist-packages
ディレクトリにあるscipy、ipythonなどのグローバルインストールを更新すると、仮想環境が使用する(およびvirtualenvの作成中に最初に取得した)パッケージも更新/変更されますか?/usr/local/lib/python2.7/dist-packages
または/usr/local/lib/python2.7/site-packages
になりますか?よろしくお願いします!
これは、PYTHONPATH
の正当な使用である可能性があります-virtualenv
が触れない環境変数であり、bashPYTHONPATH=/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages
の環境変数PATH
と同じ構文を使用します。 .bashrcまたは同様のもの。この道をたどったら、
これについて仮想環境に通知する必要はまったくありません。変更しようとはしません。
再リンクは必要ありません、そして
仮想環境の外にインストールした場合でも、どこにでも移動できます(pip install
は常に/usr/local/lib/python2.7/dist-packages/を使用します)。それらを仮想環境内から(アクティブ化されている間に)インストールすると、もちろん仮想環境に配置されます。
Virtualenvに頭を悩ませているところですが、これまでに述べたよりも簡単な方法があるようです。
virtualenv 1.7 --no-site-packagesがデフォルトの動作であるため、したがって、仮想環境に--system-site-packages
フラグを使用するだけで、パスにdist-packagesを取得できます。Ubuntuに付属の微調整されたvirtualenvを使用する場合です。 ( この答え および これ いくつかの有用な歴史を与える)。私はこれをテストしました、そしてそれは働きます。
$ virtualenv --system-site-packages .
私はここでトーマスに同意します-dist-packagesの更新の効果を確認するためにvirtualenvで必要なアクションを確認できません。
python setup.py install
でそれをテストした後、それは(再びトーマスが言ったように)まだdist-packagesに行きます。独自のPythonを作成することでそれを変更できますが、それは少し極端です。
PYTHONPATH
は私のために働きます。
vim ~/.bashrc
以下にこの行を追加します。
export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages
source ~/.bashrc
ここで達成したいのは、基本的に特定のフォルダー(dist-packages
)をPython検索パスに追加することです。これにはいくつかのオプションがあります。
.pth
)ファイルを使用すると、エントリがシステムパスに追加されます。PYTHONPATH
を変更します(そこからのエントリはシステムパスの先頭に移動します)。sys.path
を変更します。つまり、必要なフォルダを追加します。この特定のケース(グローバルdist-packages
フォルダーを有効にする)の場合、3番目のオプションの方が良いと思います。最初のオプションでは、仮想環境ごとに.pth
ファイルを作成する必要があるためです。で作業しています(外部シェルスクリプトを使用していますか?)。パッケージを配布するときに忘れがちです。 2番目のオプションでは、実行時のセットアップ(envvarの追加)が必要ですが、これも見逃しがちです。
また、3番目のオプションのみが、構成時または実行時に前提条件を必要とせず、問題なく配布できます(もちろん、同じタイプのシステム上で)。
次のような関数を使用できます。
def enable_global_distpackages():
import sys
sys.path.append('/usr/lib/python2.7/dist-packages')
sys.path.append('/usr/local/lib/python2.7/dist-packages')
そして、パッケージの__init__.py
ファイル:
enable_global_distpackages()