Virtualenv auf Ubuntu ohne site-packages
-
05-07-2019 - |
Frage
Ich habe in letzter Zeit mit virtualenv während in Python zu entwickeln. Ich mag die Idee einer getrennten Entwicklungsumgebung mit der --no-site-packages Option, aber dies zu tun, während ein PyGTK App Entwicklung kann ein bisschen schwierig sein. Die PyGTK Module werden auf Ubuntu standardmäßig installiert, und ich möchte ein virtualenv machen (mit --no-site-packages) bewusst spezifische Module, die an anderer Stelle im System befinden.
Was ist der beste Weg, dies zu tun? Oder sollte ich es einfach aufzusaugen und legen Sie die --no-site-packages Option?
Lösung
$ 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
Andere Tipps
Eine Möglichkeit ist, die Pfade zu Ihrem Code mit sys.path hinzuzufügen.
import sys
sys.path.append(somepath)
Eine andere Möglichkeit ist Website zu verwenden, die zum Hinzufügen zu sys.path .pth Dateien zusätzlich 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 gesehen, erwähnt sitecustomize.py verwendet wird, so etwas zu erfüllen, aber nach einigen Tests konnte ich es nicht zur Arbeit kommen, wie zu erwarten ist.
Hier ist es erwähnt, dass Auto-Import von sitecustomize.py in 2,5 beendet, wenn Sie nicht auf 2.5 probieren Sie es aus. (Fügen Sie einfach einen der Pfad hinzufügen Methoden, die oben in die Datei und legen Sie es in dem Verzeichnis, das Programm ausgeführt wird) Eine Arbeit um Verfahren wird in der Post für die Benutzer von 2,5 und bis erwähnt.
ich in dieser Situation finden, Symlinks oder sogar das Kopieren bestimmter Dateien (Pakete, Module, Erweiterungen) funktioniert wirklich gut.
Es ermöglicht das Programm des ausgeführt wird in der Zielumgebung zu emulieren, anstatt der Anwendung der Änderung der Entwicklungsumgebung gerecht zu werden.
Die gleiche Angebot für so etwas wie App Engine.
Überprüfen Sie die postmkvirtualenv Hook-Skript heraus hier:
https://stackoverflow.com/a/9716100/60247
In diesem Fall benutzt er es PyQt zu importieren und SIP, nachdem ein neuer virtualenv erstellt wird, aber Sie können die Pakete hinzufügen, die Sie LIBS benötigen.
Und das Skript stimmen, weil es ist fantastisch:)
Wenn Sie die Links zu den entsprechenden Systems Python gtk-2.0 in der virtualenv aufnehmen möchten, können Sie einfach pip verwenden zu installieren ruamel.venvgtk :
pip installieren ruamel.venvgtk Sie haben keine Import etwas haben, sind die Links-Setup während der Installation.
Dies ist besonders praktisch, wenn Sie tox
verwenden, in diesem Fall müssen Sie nur die Abhängigkeit enthalten (für tox):
deps:
pytest
ruamel.venvgtk
und einem neu eingerichteten python2.7-Umgebung werden die entsprechenden Links enthalten, bevor die Tests ausgeführt werden.
Weitere detaillierte Informationen darüber, wie die Links werden können Setup in
diese Antwort finden