Ubuntu + virtualenv = ein Durcheinander? virtualenv hasst dist-packages, will Website-Pakete
Kann mir jemand bitte erklären, was Los ist mit python in ubuntu 9.04?
Ich versuche zu drehen virtualenv
, und die --no-site-packages
Flagge scheint zu tun, nichts mit ubuntu. Ich installierte virtualenv 1.3.3
mit easy_install
(die ich habe ein Upgrade auf setuptools 0.6c9
) und alles scheint installiert zu /usr/local/lib/python2.6/dist-packages
Ich übernehmen, dass bei der Installation ein Paket mit apt-get, es befindet sich in /usr/lib/python2.6/dist-packages/
?
Das Problem ist, es ist ein /usr/local/lib/python2.6/site-packages
wie gut, dass sitzt nur da, leer. Es scheint (durch die Betrachtung der path
im virtualenv
), dass dies der Ordner virtualenv verwendet als backup. So dachte auch ich weglassen --no-site-packages
ich keinen Zugriff auf meine lokalen Systeme-Pakete aus meinem virtualenv ist.
Also meine Fragen sind:
- Wie bekomme ich
virtualenv
einer derdist-packages
? - Die dist-packages sollte Stelle ich es an?
/usr/lib/python2.6/dist-packages
oder/usr/local/lib/python2.6/dist-packages/
- Was ist der Punkt, der
/usr/lib/python2.6/site-packages
? Es ist nichts drin! - Ist es zuerst kommt, mahlt auf dem Weg? Wenn ich eine neuere version von Paket XYZ installiert
/usr/local/lib/python2.6/dist-packages/
- und und ältere (aus den ubuntu-repos/apt-get) in/usr/lib/python2.6/dist-packages
, die man bekommt importiert, wenn ichimport xyz
? Ich gehe davon aus das basiert auf der Pfad-Liste, ja? - Warum zum Teufel ist das so verwirrend? Gibt es etwas, was fehlt mir hier?
- Wo ist es definiert, dass
easy_install
installieren sollten, um/usr/local/lib/python2.6/dist-packages
? - Wird sich dies auf
pip
auch?
Vielen Dank, wer kann klar diese up!
- Ich vermute, dass Ubuntu kaputt ist hier: es gibt keinen Sinn oder Grund zu der Umbenennung site-packages zu dist-packages (das ist, was /usr/local gibt es für). Kann dir nicht helfen, mit virtualenv, obwohl.
- Verwenden
PYTHONPATH
variable. [Siehe hier][1] [1]: stackoverflow.com/questions/19210964/... - 7 Jahre alt? warum ist diese Frage noch gepostet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde geneigt sein, es zu hacken, indem Sie site-packages einen link zu dist-packages, aber ich denke, dies könnte Auswirkungen auf andere Fälle, wo Sie möchten, installieren einige andere Erweiterung als von der ubuntu-dist. Ich kann nicht denken, der eine andere Antwort zu 1, außer tweaking virtualenv Quellen (sowohl mit ubuntu und virtualenv als so populär, wäre ich nicht überrascht, zu finden, gezwickt Versionen bereits vorhanden).
Re 2, wenn Sie /usr/local/bin/python verwenden Sie die /usr/local version der lib (einschließlich der Website-Paketen) und Umgekehrt, wenn man mit /usr/bin/python.
Re 3, es wird etwas dabei sein, wenn Sie jemals installieren Sie eine extension für /usr/bin/python von Quellen (nicht via easy_install oder ubuntu-Distribution).
Re 4, ja, frühere Einträge auf den Weg Vorrang.
Re 5, easy_install ist einfach nur in seinem Namen -- es ist so viel dunkle Magie, die er sorgfältig aufbewahrt-standard-python-Bibliothek, trotz seiner Bequemlichkeit, weil der Konsens unter uns python-Entwicklern ist, dass Tiefe, dunkle Magie für die Bequemlichkeit ist "einfach" nur an der Oberfläche.
Re 6, ich denke, das ist eine ubuntu-änderung easy_install -- wenn das stimmt, dann ist es definiert, wo Canonical oder andere ubuntu-maintainer Ihre kollektiven Entscheidungen.
Re 7, sorry, keine Ahnung -- ich habe keine halbwegs aktuellen ubuntu zur hand um das zu überprüfen.
Ich glaube, Mike Orr Antwort von die virtual-env-mailing-Liste scheint der beste zu sein. Hinweis: der OP veröffentlicht diese Frage an beiden stellen.
Ursprünglichen Inhalt der mail:
Jahren Debian erstellt /usr/local/lib/pythonVERSION/site-packages,
und kompiliert die Python-binary, um es in der Standard-Suche
Pfad. Ubuntu, gefolgt von Debian führen, als es normalerweise tut. Die Python
Entwickler nicht so, weil man Störungen mit einer
lokal installierte /usr/local/bin/python unter Verwendung der gleichen site-packages
- Verzeichnis. Ubuntu schließlich beschlossen, aufzugeben, Website-Pakete und nutzen
dist-packages statt, eine Bezeichnung, die Sie erfunden haben, so wäre es nicht
mit irgendetwas stört. Der loing Geschichte ist irgendwo da draußen, wenn
Sie es google, irgendwo in der Python-bug-tracker oder distutils SIG oder
so.
Funktioniert das system, zumindest, wenn man die Ubuntu-virtualenv-Paket.
Einige Leute haben Probleme mit einem lokal installierten virtualenv auf
Ubuntu, weil die Magie sys.Pfad-Einträge wurden nicht Hinzugefügt oder
etwas. Ich bin nicht sicher, dass --no-site-packages, weil ich nie verwenden
die option: ich Laufe PIL und mysqldb aus dem Ubuntu-Pakete, da es
kann schwer sein, um die Kompilierung eines C-Abhängigkeiten manchmal. (Brauchen die
richtigen header-Dateien von Python ignoriert die header-Dateien, etc.)
Also Ubuntu Python-Pakete gehen in
/usr/lib/pythonVERSION/dist-packages. Oder, dass die python-Unterstützung
Verzeichnis für einige Grund. Lokal installierte Python-Pakete gehen in
/usr/local/lib/pythonVERSION/dist-packages standardmäßig. Immer Wenn Ich
installieren Sie ein Ubuntu 9.04 system I ausgeführt:
$ sudo apt-get install python-setuptools (6.0c9)
$ sudo apt-get install python-virtualenv (1.3.3)
$ sudo easy_install pip
$ sudo pip install virtualenvwrapper
Den virtualenvs funktionieren auf diese Weise, obwohl ich noch nicht ausprobiert --no-site-packages.
Diese Versionen sind sowohl in Ubuntu 9.04 sind, so sind Sie, die es schwerer auf
selbst durch den Einbau vor Ort.
Ja
Ja
sys.Pfad gescannt wird, um. Das einzige lustige an der Sache ist, dass .pth-Eier
setzen sich früher oder später in den Weg, als manche Leute erwarten. Aber wenn
bist du mit pip-für alles, was Sie tun können (also, außer zum installieren von pip
selbst kompilierte Eier, und einen snapshot von einem lokalen Verzeichnis ein
kopieren, anstatt ein ei link), werden Sie nicht haben viele .pth Eier sowieso.
Es ist nicht gut dokumentiert. Ich fand es heraus durch das Scannen des web.
Ja, pip automatisch zu installieren
/usr/local/lib/pythonVERSION/site-packages. Verwenden Sie "pip install-E
$VIRTUAL_ENV Paketname" zu installieren, in ein virtualenv.
Sollten Sie wirklich nicht berühren Ubuntu Python-installation, es sei denn, Sie sind Gebäude-system-admin-tools, oder etwas zu bauen, das könnte als ein neues system service.
Wenn Sie Ubuntu zu entwickeln oder bereitstellen von Python-Anwendungen, immer bauen Sie Ihren eigenen Python von der Quelle, Teer und verwenden, die für die Bereitstellung. So dass Sie haben all die Verzeichnisse in den richtigen Ort und virtualenv normalerweise arbeiten. Wenn Sie sich für die Bereitstellung einiger Python-apps auf dem server, dann machen Sie Ihre Python-live in irgendeinem Ort wie
/home/python
oder/opt/python
oder irgendwo außerhalb Ihres home-Verzeichnisses. Stellen Sie sicher, dass Sie Schreibberechtigungen für die Entwickler-Gruppe (users
?) so dass die Leute können einfach durch hinzufügen von Paketen.Dies erlaubt Ihnen auch, um zwei Reihen von Verpackungen. Diejenigen, die Ihre in-house standard-tools, die installiert werden können, in Ihre Python-Distribution und werden Sie Teil des Tarballs, die Sie bereitstellen, und nur die app-spezifischen Pakete werden in einem virtualenv.
Nicht aktualisieren oder ändern Sie das Ubuntu-system installiert ist Python.
Nun habe ich ein Ubuntu 9.04 und wollte schnell einrichten ein paar Sandboxen mit Website-Pakete und eine ohne. Und die Dinge funktionieren.
Der einzige Unterschied in der Herangehensweise ist, die ich verwendet Ubuntu python-virtualenv-Paket (1.3.3). Und davon ausgehen, dass es gezwickt vom Ubuntu-team zu passen Ubuntu-setups.
Zusammenfassend deaktivieren easy_installed virtualenv für eine Weile, Verwendung verpackt python-virtualenv und sehen, ob das Ihren Erwartungen entspricht.
In der Tat verwenden wir ähnliche Einrichtung für die Produktion, ohne irgendein problem. Rest ist schon beantwortet von Alex.
Anderen Weg, um es zu beheben:
https://stackoverflow.com/a/17265840/202168
Haben, zu erinnern, zu tun, dass in jedem virtualenv, wo Sie es brauchen, aber sich nicht auf hacks oder eine spezielle version von virtualenv