[Python-de] virtualenv Kopien von python/pip/... nötig?
Markus Zapke-Gründemann
markuszapke at gmx.net
Mi Jan 11 10:36:44 CET 2012
Hallo Thomas.
Thomas Guettler schrieb:
> ich arbeite gerade das erste Mal mit virtualenv.
>
> Ich will django und ein paar andere Apps. Ich will in $HOME unter Linux
> Pakete bequem mit "pip install ..." installieren.
>
> Wenn ich nun mit virtualenv das Verzeichnis ENV anlege, wird auch das gesamte
> Python dorthin kopiert. Das will ich eigentlich nicht.
Es wird nicht die gesamte Python Installation in das Virtualenv kopiert.
Schauen wir uns mal ein Virtualenv an. Es besteht aus drei Verzeichnissen:
- bin
- include
- lib
Das Verzeichnis "bin" enthält die Skripte zum Aktivieren und Deaktivieren des
Virtualenvs. Außerdem easy_install, pip und python (und evtl. noch andere
Skripte). python ist eine Kopie des python des Systems.
Das Verzeichnis "include" enthält nur einen Symlink zum "include" Verzeichnis
des System-Python.
Das Verzeichnis "lib/python2.6" enthält fast ausschließlich Symlinks auf die
Dateien im "lib" Verzeichnis des System-Python. Nur das Verzeichnis
"site-packages" und die Datei "site.py" sind keine Symlinks, sonst könnte das
Virtualenv auch nicht funktionieren. Denn es geht ja darum separat Pakete zu
installieren.
Hardlinks gibt es nicht. Es wird auch nicht "das ganze Python" in das
Virtualenv kopiert.
> python, pip, easy_install sind mir auf OS Ebene lieber. Ich will nur
> django, south ... virtualisieren.
pip und easy_install kannst du auch innerhalb eines Virtualenvs problemlos
aktualisieren.
> Security Updates von Python (auf Betriebssystemebene (Debian/Ubuntu-Server))
> würden dann nicht in der virtuellen Umgebung ankommen.
Ob Security Updates im Virtualenv "ankommen" hängt davon ab, welcher Teil von
Python aktualisiert wurde. Da die meisten Bestandteile des Virtualenvs Symlinks
sind würden diese bei einem Update des System Python aktualisiert werden.
> Prinzipiell stören mich die paar Bytes für die Python-Kopie nicht, ich
> wollte bloß mal fragen wir andere das handhaben.
Mit "pip freeze" kann man schnell eine Liste der Pakete erstellen, die in einem
Virtualenv enthalten sind. Diese Liste kann man in eine Datei schreiben. So hat
man die Konfiguration des Virtualens (fast) gesichert. Das einzige was jetzt
noch fehlt sind die Parameter, mit denen es erstellt wurde. Die kann man aber
dokumentieren. Wenn man bei einem Update auf Nummer sicher gehen will erstellt
man das Virtualenv also einfach neu. Das geht schnell und ist unkompliziert.
Falls dir das nicht gefällt gibt es Alternativen zu Virtualenv, auf die auch in
der Virtualenv Dokumentation[1] hingewiesen wird.
Ansonsten gibt es noch "PEP 370 - Per-user site-packages Directory"[2], dass ab
Python 2.6 zur Verfügung steht[3].
Viele Grüße
Markus
[1]
http://www.virtualenv.org/en/latest/index.html#compare-contrast-with-alternatives
[2] http://www.python.org/dev/peps/pep-0370
[3]
http://docs.python.org/whatsnew/2.6.html#pep-370-per-user-site-packages-directory
Mehr Informationen über die Mailingliste python-de