web-dev-qa-db-fra.com

virtualenv: Spécification des packages à utiliser à l'échelle du système par rapport à local

Duplicata possible:
Faire en sorte que virtualenv hérite de packages spécifiques de vos sites-packages globaux

Existe-t-il un moyen de créer un virtualenv pour Python et spécifiez les packages à utiliser ( hérité) de l'installation à l'échelle du système, et lesquels devraient être ignorés de l'installation à l'échelle du système?

Plus précisément, disons par exemple qu'il existe un système - à l'échelle de:

numpy
scipy
matplotlib

Je souhaite créer un environnement virtuel tel que:

  • Utilise l'installation à l'échelle du système de numpy et scipy
  • Ignore l'ensemble du système matplotlib et me laisse installer/mettre à niveau mes propres versions de celui-ci (avec pip -U matplotlib).

Est-ce possible?

48

La façon la plus simple de le faire est de créer un virtualenv qui inclut les packages du site système, puis d'installer les versions dont vous avez besoin:

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

Vous pouvez également nettoyer le virtualenv par la suite en vérifiant la sortie de pip freeze et en supprimant les packages dont vous ne voulez pas. (suppression des packages système-site avec pip uninstall ne fonctionne plus pour les nouvelles versions de virtualenv)

Une autre façon serait de créer un virtualenv propre et de lier les pièces dont vous avez besoin:

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

Les commandes peuvent être légèrement différentes dans un environnement non unixish. Les chemins dépendent également du système que vous utilisez. Afin de trouver le chemin vers la bibliothèque, démarrez le python Shell (sans virtualenv activé), importez le module et cochez module_name.__path__. par exemple.

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']

De plus, si vous avez créé votre virtualenv avec --system-site-packages, il est possible d'installer une version plus récente que celle du système avec pip install --upgrade --ignore-installed numpy.

66
bikeshedder