2008-10-30 14 views
24

Ich habe virtuellenv in letzter Zeit bei der Entwicklung in Python verwendet. Ich mag die Idee einer segregierten Entwicklungsumgebung, die die Option --no-site-packages verwendet, aber das kann bei der Entwicklung einer PyGTK-App ein bisschen schwierig sein. Die PyGTK-Module sind standardmäßig auf Ubuntu installiert, und ich möchte ein virtualenv (mit --no-site-packages) auf bestimmte Module aufmerksam machen, die sich irgendwo auf dem System befinden.Virtualenv auf Ubuntu ohne site-packages

Was ist der beste Weg, dies zu tun? Oder sollte ich es einfach aufheben und die Option --no-site-packages fallen lassen?

Antwort

34
$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv 
$ cd myvirtualenv 
$ source bin/activate 
$ cd lib/python2.6/ 
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py 
$ ln -s /usr/lib/pymodules/python2.6/cairo/ 
$ python 
>>> import pygtk 
>>> import gtk 
+8

Das brachte mich auf den richtigen Weg, aber die Dinge haben sich durch Ubuntu 11.10 etwas verändert. Für Python 2.7 in Ubuntu 11.10, etwas mehr wie folgt: ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} lib/python2 .7/site-packages – keturn

+2

Hinweis: Die gtk-Ordner und pth-Dateien müssen in lib/python2.6/site-packages, nicht lib/python2.6, gehen. Siehe: http://StackOverflow.com/Questions/3580520/Python-Virtualenv-GTK-2-0 – jmanning2k

+2

Hier ist eine kleine Änderung zu Keturns Version, um die env var zu verwenden: $ ln -sf /usr/lib/python2.7/ dist-packages/{glib, gobject, cairo, gtk-2.0, pygtk.py, pygtk.pth} $ VIRTUAL_ENV/lib/python2.7/Site-Pakete –

4

Eine Möglichkeit besteht darin, die Pfade zu Ihrem Code mit sys.path hinzuzufügen.

Eine andere Möglichkeit ist die Verwendung der Website, die .pth-Dateien zusätzlich zum Hinzufügen von sys.path verarbeitet.

import site 

site.addsitedir(sitedir, known_paths=None) 

https://docs.python.org/library/site.html

Aber Sie wollen wahrscheinlich nicht diese auf alle Ihrem zugehörigen Code hinzuzufügen.

Ich habe erwähnt, dass sitecustomize.py verwendet wird, um so etwas durchzuführen, aber nach ein paar Tests konnte ich es nicht wie erwartet funktionieren.

Hier erwähnt es, dass auto-import von sitecustomize.py endete in 2.5, wenn Sie nicht auf 2.5 versuchen es aus. (Fügen Sie einfach eine der obigen Pfadhinzufüge-Methoden zu der Datei hinzu und legen Sie sie in dem Verzeichnis ab, in dem Ihr Programm ausgeführt wird) Eine Umgehungsmethode wird im Beitrag für Benutzer ab 2.5 erwähnt.

http://code.activestate.com/recipes/552729/

1

ich in dieser Situation finden, Symlinks oder sogar das Kopieren bestimmter Dateien (Pakete, Module, Erweiterungen) funktioniert wirklich gut.

Damit kann das Programm emulieren, in der Zielumgebung ausgeführt zu werden, anstatt die Anwendung an die Entwicklungsumgebung anzupassen.

Gleiches Angebot für etwas wie AppEngine.

+0

Yeh gefunden werden, aber Symlinks wo? Und was müsste ich für etwas wie PyGTK symlink? –

+0

Link zu Ihren Site-Paketen. Auf meinem Ubuntu hier habe ich /usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk. Bereits verweist /var/lib/python-support/python2.5/gtk-2.0/gtk dorthin. Scheint wie ein guter Anfang, und Sie benötigen möglicherweise Versuch und Irrtum. Aber Sie können es für das nächste Mal einfach auskrempeln. –

1

Überprüfen Sie die postmkvirtualenv Hook-Skript hier aus:

https://stackoverflow.com/a/9716100/60247

In diesem Fall benutzt er es PyQt und SIP nach einem neuen virtualenv zu importieren erstellt wird, aber Sie können die Pakete hinzufügen, dass Sie müssen LIBS.

Und das Skript stimmen, weil es fantastisch :)

0

Wenn Sie die Links zu den entsprechenden Systems Python gtk-2.0 in der virtualenv aufnehmen möchten, können Sie einfach pip verwenden installieren ruamel.venvgtk:

pip install ruamel.venvgtk Sie haben nichts importieren, die Links sind während der Installation eingerichtet.

Dies ist besonders praktisch, wenn Sie tox, müssen Sie nur in diesem Fall werden mit der Abhängigkeit (für tox) enthalten:

deps: 
    pytest 
    ruamel.venvgtk 

und werden die entsprechenden Links enthalten neu eingerichteten python2.7 Umwelt bevor die Tests ausgeführt werden.

Detailliertere Informationen darüber, wie die Links-Setup sind, können in this answer