57

重複の可能性:
virtualenv がグローバル サイト パッケージから特定のパッケージを継承するようにする

virtualenvfor Pythonを作成し、システム全体のインストールから使用 (継承) するパッケージと、システム全体のインストールから無視するパッケージを指定する方法はありますか?

より具体的には、たとえば、次のシステム全体のインストールがあるとします。

numpy
scipy
matplotlib

次のような仮想環境を作成したいと思います。

  • numpyおよびのシステム全体のインストールを使用します。scipy
  • システム全体のを無視し、独自のバージョンをインストール/アップグレードmatplotlibできます(を使用)。pip -U matplotlib

これは可能ですか?

4

1 に答える 1

83

これを行う最も簡単な方法は、システム サイト パッケージを含む virtualenv を作成し、必要なバージョンをインストールすることです。

$ virtualenv --system-site-packages foo
$ source foo/bin/activate
$ pip install Django==1.4.3

pip freeze出力を確認して不要なパッケージを削除することで、後で virtualenv をクリーンアップすることもできます。(system-site-packages の削除pip uninstallは、新しいバージョンの virtualenv では機能しなくなりました)

もう 1 つの方法は、クリーンな virtualenv を作成し、必要なパーツをリンクすることです。

$ virtualenv --no-site-packages foo
$ source foo/bin/activate
$ ln -s /usr/lib/python2.7/dist-packages/PIL* $VIRTUAL_ENV/lib/python*/site-packages

unixish 以外の環境では、コマンドが若干異なる場合があります。パスは、使用しているシステムによっても異なります。ライブラリへのパスを見つけるには、python シェルを起動し (virtualenv をアクティブ化せずに)、モジュールをインポートして を確認しmodule_name.__path__ます。例えば

Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> PIL.__path__
['/usr/lib/python2.7/dist-packages/PIL']

また、virtualenv を--system-site-packagesで作成した場合は、システムにあるものよりも新しいバージョンを でインストールすることができpip install --upgrade --ignore-installed numpyます。

于 2013-01-28T21:34:31.653 に答える