Wie einzelne Module aus site-packages in virtualenv übernehmen?
![](https://secure.gravatar.com/avatar/5238a3732fd7663851110f536394a5c6.jpg?s=120&d=mm&r=g)
Hallo zusammen, ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert. Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss. "virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben. Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool? Schon mal herzlichen Dank im Voraus. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Goebel Consult http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/2012-09-steht-ein-manta-fahrer-vor-der-uni Blog: http://www.goebel-consult.de/blog/20050315 Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/7f0529e9d8eb4ae75375843c305296d8.jpg?s=120&d=mm&r=g)
Am 22. August 2013 10:17 schrieb Hartmut Goebel <h.goebel@goebel-consult.de>:
Hallo zusammen,
ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert.
Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss.
"virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben.
Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool?
Es gibt kein Tool, und ich glaube auch nicht, dass jemand dafür Quelltext bereitstellen kann. Aus guten Grund, denn einfach so Pakete aus dem System-Python zu kopieren, kann ziemlich leicht schiefgehen, wenn die Versionsnummern abweichen. Ich würde mithin davon absehen, einfach so Module hin und her zu kopieren, und stattdessen in den sauren Apfel beißen, und PyQt für das jeweilige virtualenv kompilieren. Das kostet zwar Zeit, und dauert, aber nicht so lange, wie das Debuggen eines mysteriösen Absturzes aufgrund einer ABI-Inkompatibilität, oder merkwürdiger Fehler aufgrund vergessener Qt-Plugins (e.g. PNG-Bilder werden nicht angezeigt, weil das entsprechende QImage-Plugin nicht mehr gefunden wird).
![](https://secure.gravatar.com/avatar/5238a3732fd7663851110f536394a5c6.jpg?s=120&d=mm&r=g)
Am 22.08.2013 11:30, schrieb Sebastian Wiesner:
Aus guten Grund, denn einfach so Pakete aus dem System-Python zu kopieren, kann ziemlich leicht schiefgehen, wenn die Versionsnummern abweichen.
Das kann ich nicht nachvollziehen: Das System-Python,das dortige PyQT und die QT-Libs passen zusammen. Ebenso passen alle anderen extension-Module zum System-Python. (Würde das nicht gelten, dann hätten die Macher der Linux-Distribution sehr schlecht gearbeitet.) Solange ich das virtualenv auf Basis des System-Python erstelle, sollte als also keine ABI-Inkompatibilität oder anderes geben. Allenfalls kann es sein, dass "irgendwelche" Module oder Daten im virtuelenv fehlen, weil die Abhängigkeiten unvollständig sind, oder das Tool unvollständig arbeitet. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Goebel Consult http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/2011-10-aus-der-schublade-in-die-koepfe Blog: http://www.goebel-consult.de/blog/20060121 Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/7c27e514504f90a63edaefd74248a461.jpg?s=120&d=mm&r=g)
Hallo zusammen,
ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert.
Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss.
"virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben.
Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool?
Ist mir nix bekannt. Schau dir mal den Unterschied zwischen einem venv mit und ohne site-packages an. Ich fuerchte aber, dass du da nicht viel machen kannst. Denn da wird wahrscheinlich das gesamte Verzeichnis eingebunden. Sonst waeren ja zB subsequent installierte Pakete im System-Python nicht sichtbar. Zwei Loesungen fallen mir: - eigenes Python, mit deinen "ausgewaehlten" Paketen - virtualenv vom virtualenv. Das funktioniert aber nicht einfach so! Wenn muesstest du das zweite so "pimpen", dass es die Pakete des ersten quasi als system-site-packages behandelt. Koennte einen Patch fuer virtualenv wert sein. Diez
![](https://secure.gravatar.com/avatar/5238a3732fd7663851110f536394a5c6.jpg?s=120&d=mm&r=g)
Am 22.08.2013 12:08, schrieb Diez Roggisch:
Ist mir nix bekannt.
Schade :-(
Schau dir mal den Unterschied zwischen einem venv mit und ohne site-packages an. Ich fuerchte aber, dass du da nicht viel machen kannst. Denn da wird wahrscheinlich das gesamte Verzeichnis eingebunden. Sonst waeren ja zB subsequent installierte Pakete im System-Python nicht sichtbar.
Ja. site.py prüft, ob die Datei 'no-global-site-packages.txt' existiert. Wenn nicht, dass wird sys.path um den site-packages dem System-Python erweitert. Also das gesamte Verzeichnis.
Zwei Loesungen fallen mir:
- eigenes Python, mit deinen "ausgewaehlten" Paketen - virtualenv vom virtualenv. Das funktioniert aber nicht einfach so! Wenn muesstest du das zweite so "pimpen", dass es die Pakete des ersten quasi als system-site-packages behandelt. Koennte einen Patch fuer virtualenv wert sein.
Mein Ansatz ist folgender: Ich suche die *.egg *.egg-info, *.pth und ggf die Module selbst und erstelle im virtualenv einen Softlink. Eine erste Version, die das kann hat mich zwar fast den ganzen Tag gekostet, scheint aber zu laufen :-) -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Goebel Consult http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/2011-10-aus-der-schublade-in-die-koepfe Blog: http://www.goebel-consult.de/blog/20060121 Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/4f3782b004830f622e19029e5f7fc146.jpg?s=120&d=mm&r=g)
Zitat von Hartmut Goebel <h.goebel@goebel-consult.de>:
Hallo zusammen,
ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert.
Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss.
"virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben.
Mit virtualenvwrapper (http://virtualenvwrapper.readthedocs.org/en/latest/install.html) lässt sich einfach mit toggleglobalsitepackages zwischen der Nutzung der globalen Pakete umschalten. Wenn die globalen Pakete eingeschaltet sind, sucht Python zuerst in der virtuellen Umgebung. Wenn Python das Paket dort nicht findet, geht es in das globale site-packages. Wenn also das Paket xyz sowohl global als auch in der Umgebung installiert ist, kommt das aus der Umgebung zum Zug. Ist es nicht dort nimmt Python das globale. Wenn die globalen Pakete sichtbar sind versucht pip aber auch dort zu installieren. Mein Vorschlag: 1. Mit toggleglobalsitepackages globale Pakete ausschalten. 2. Gewünschtes Paket mit pip in die virtuelle Umgebung installieren. 3 Mit toggleglobalsitepackages globale Pakete wieder einschalten. Jetzt sollte das gerade installierte Paketen aus der virtuelle Umgebung und die anderen aus den globalen Paketen kommen. Und zwar auch dann, wenn ein gleichnamiges Paket xyz schon global vorhanden ist. Vielleicht hilft dir das ja weiter. Viele Grüße Mike
Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool?
Schon mal herzlichen Dank im Voraus.
-- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP
Goebel Consult http://www.goebel-consult.de
Monatliche Kolumne: http://www.cissp-gefluester.de/2012-09-steht-ein-manta-fahrer-vor-der-uni Blog: http://www.goebel-consult.de/blog/20050315
Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/4ad94fe55232b9823bf2fa85c8d7b2c4.jpg?s=120&d=mm&r=g)
On Thu, 22 Aug 2013 10:17:07 +0200 Hartmut Goebel <h.goebel@goebel-consult.de> wrote:
Hallo zusammen,
ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert.
Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss.
"virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben.
Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool?
Schon mal herzlichen Dank im Voraus.
Vielleicht suchst Du "nur" eine Möglichkeit ein installiertes Paket zu einem binary-egg zu packen? Das könntest Du dann in die envs entpacken. Oder Du beißt so halb in den sauren Apfel und baust binary-eggs aus dem, was du da mehrfach brauchst... Arnold
![](https://secure.gravatar.com/avatar/9a4688b662a367919c25c0ce50cc3da0.jpg?s=120&d=mm&r=g)
Ich habe mir ein Tool gebaut, das entsprechende Symlinks in das site-packages Verzeichnis des virtualenvs setzt. Ich komme da aber erst am Montag ran, weil ich noch im Urlaub bin und das Skript leider nicht in meinem Repository liegt. Christopher Arndt <info@chrisarndt.de> Am 22.08.2013 um 09:17 schrieb Hartmut Goebel <h.goebel@goebel-consult.de>:
Hallo zusammen,
ich baue eben eine Entwicklungsumgebung für https://github.com/coherence-project/. Das Package benutzt u.a. Twisted, ein Teilprojekt gar PyQt. Diese Packages sind bei mir bereits in site-packages installiert.
Nun möchte ich ein virtualenv aufsetzen, und ausgewählte Packages (eben oben genannte) dort verfügbar machen. damit möchte ich vermeiden, dass diese Pakete jedesmal compiliert werden müssen -- und ich die gesamten Entwickler-Pakete für Qt installieren muss.
"virtualenv --system-site-packages" stellt aber alle Packages im vrtualenv zur Verfügung. Ich möchte nur ausgewählte haben.
Hat jemand ein paar Code-Snippsel für mich, oder ein kleines Tool?
Schon mal herzlichen Dank im Voraus.
-- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Goebel Consult http://www.goebel-consult.de
Monatliche Kolumne: http://www.cissp-gefluester.de/2012-09-steht-ein-manta-fahrer-vor-der-uni Blog: http://www.goebel-consult.de/blog/20050315
Goebel Consult ist Mitglied bei http://www.7-it.de/
_______________________________________________ python-de maillist - python-de@python.org http://mail.python.org/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/5238a3732fd7663851110f536394a5c6.jpg?s=120&d=mm&r=g)
Am 23.08.2013 19:23, schrieb Christopher Arndt:
Ich habe mir ein Tool gebaut, das entsprechende Symlinks in das site-packages Verzeichnis des virtualenvs setzt. Ich komme da aber erst am Montag ran, weil ich noch im Urlaub bin und das Skript leider nicht in meinem Repository liegt.
Super! Genau da war auch meine Idee. Ich habe inzwischen zwar auch was gebaut, aber das ist noch recht rudimentär. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Goebel Consult http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/2012-12-in-die-cloud-in-die-cloud-ab-wo-soll-... Blog: http://www.goebel-consult.de/blog/20050620 Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/5238a3732fd7663851110f536394a5c6.jpg?s=120&d=mm&r=g)
Hallo Christopher, Am 23.08.2013 19:23, schrieb Christopher Arndt:
Ich habe mir ein Tool gebaut, das entsprechende Symlinks in das site-packages Verzeichnis des virtualenvs setzt. Ich komme da aber erst am Montag ran, weil ich noch im Urlaub bin und das Skript leider nicht in meinem Repository liegt.
Wir beide scheinen ja nicht die einzigen zu sein, die das brauchen :-) Mein Script findest Du unter https://github.com/coherence-project/Development: setup-virtualenv.sh und resolve-requirements.py. Allerdings ist das momentan ziemlich genau auf meinen Einsatzzweck zugeschnitten. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/2011-11-in-troja-nichts-neues Blog: http://www.goebel-consult.de/blog/pdf-kommentare-unter-linux-nix-is Goebel Consult ist Mitglied bei http://www.7-it.de/
![](https://secure.gravatar.com/avatar/9a4688b662a367919c25c0ce50cc3da0.jpg?s=120&d=mm&r=g)
Hallo, On 21.10.2013 11:30, Hartmut Goebel wrote:
Am 23.08.2013 19:23, schrieb Christopher Arndt:
Ich habe mir ein Tool gebaut, das entsprechende Symlinks in das site-packages Verzeichnis des virtualenvs setzt.
Wir beide scheinen ja nicht die einzigen zu sein, die das brauchen :-)
Mein Script findest Du unter https://github.com/coherence-project/Development:
ach, das hatte ich ganz vergessen, die letzten drei Wochen waren komplett mit der PyCon.DE ausgelastet. Ich habe mein Script eben noch mal überarbeitet und in mein Repository hochgeladen: http://trac.chrisarndt.de/code/browser/projects/scripts/addsitepackage2venv.... Funktioniert mit Single-File Modulen und Packages, allerdings nicht mit Modulen/Packages in Zip-Archiven o.ä. Über Rückmeldungen zu Fehlern, verbesserungsmöglichkeiten o.ä. freue ich mich immer. Chris
participants (6)
-
Arnold Krille
-
Christopher Arndt
-
Diez Roggisch
-
Hartmut Goebel
-
mmueller@python-academy.de
-
Sebastian Wiesner