2012-05-10 14 views
11

Ich möchte ein virtualenv mit einem anderen als Ausgangspunkt erstellen, ist das möglich?Kann ein virtualenv von einem anderen erben?

Ich habe Fälle im Auge zu verwenden:

  1. Lassen Sie uns sagen, ich habe eine zwei virtualenv eine für die Produktion und eine für die Entwicklung. Die Entwicklungsumgebung benötigt die gleichen Pakete wie die Produktionsumgebung, benötigt aber andere, die ich in der Produktionsumgebung nicht haben möchte. Ich möchte die üblichen Pakete nicht zweimal installieren.

  2. ich mit einer Entwicklungsversion eines Pakets experimentieren wollen, sagen matplotlib zum Beispiel. Die Entwicklungsversion des Pakets hat dieselben Anforderungen wie die stabile Version. Also erstelle ich eine virtualenv namens matplotib_stable und installiere die Anforderungen und die stabile Version. Dann erstelle ich einen zweiten virtualenv namens matplotlib_dev und verwende matplotlib_stable als Startpunkt (für die matplotlib Anforderungen) aber dann installiere ich die Entwicklungsversion.

How do I install from a local cache with pip? scheint die Frage der Download-Pakete zu adressieren, aber ich glaube nicht, es mit modifizierenden sys.path beschäftigt.

Antwort

12

Eine Lösung ist virtualenvwrapperadd2virtualenv Befehl zu verwenden. Dies

Fügt die angegebenen Verzeichnisse zum Python-Pfad für die derzeit aktiven virtualenv.

Also, wenn ich zwei virtualenv, ENV1 und ENV2, und ich möchte ENV2, um die Pakete zuzugreifen in ENV1, dann muss ich:

  1. aktivieren ENV2:

    workon ENV2

  2. fügen Sie das Site-Paket ENV1 hinzu s Verzeichnis mit add2virtualenv:

    add2virtualenv $WORKON_HOME/ENV1/lib/python2.6/site-packages

Die oben geht davon aus $WORKON_HOME ist die Lage Ihrer virtualenv Verzeichnisse, und dass Sie python2.6 verwenden, so offensichtlich jene entsprechend anpassen.

Während dies den Zugriff auf die Pakete ermöglicht, wird der Shell-Pfad nicht angepasst. Mit anderen Worten, auf Skripts, die im Verzeichnis bin installiert sind, kann mit dieser Methode nicht zugegriffen werden.

+0

Wenn ich installierte das gleiche Paket mit unterschiedlichen Versionen auf beiden virtualenvs, fand heraus, dass ich die Außen env (ENV 1) Vorrang vor fand das interne env (ENV2). Sieht so aus, als ob add2virtualenv seine Pfade früher in die sys.path-Importliste stellt. Eine einfache Lösung besteht darin, dem obigen Befehl zu folgen: 'add2virtualenv $ WORKON_HOME/ENV2/lib/python2.6/site-packages' und dann funktioniert es wie ein Zauber. – Yonatan

+0

@Yann Danke Yann! Ich installiere pylint in ENV1, dann 'add2virtualenv $ WORKON_HOME/ENV1/lib/python3.4/site-packages', aber pylint funktioniert nicht! – HelloNewWorld

+1

@HelloNewWorld Ich habe 'virtualenv' und' vertualenvwrapper' schon lange nicht mehr benutzt, warum schreibst du keine neue Frage zu diesem Thema? – Yann

-1

Das folgende scheint für mich zu arbeiten. Angenommen, eine alte virtuelle Umgebung, von der Sie übernehmen möchten, heißt old.Da Sie das Python-Version zu verwenden, wenn eine neue Umgebung zu schaffen, einfach tun angeben:

virtualenv -p path_to_venvs/old/bin/python --system-site-packages new_env 
+0

Leider können Sie virtualenvs auf diese Weise nicht erben. Beachten Sie die Nachricht in der Ausgabe Ihres Befehls: ** Mit Basis-Präfix '/ usr' ** – allprog

+0

Hmm, Sie haben Recht, ich bekomme diese Nachricht. Für alle praktischen Zwecke funktioniert es aber immer noch für mich - ich kann die Pakete aus dem alten virtualenv importieren, während ich das neue benutze. Ich werde das untersuchen! – Lisa

+0

Sind Sie sicher, dass Sie das alte env verwenden? Installieren Sie etwas, das Sie nicht in der Systeminstallation haben und versuchen Sie es zu importieren. – allprog

Verwandte Themen