Frage

Kann jemand mir bitte erklären, was mit Python in ubuntu los ist 9,04?

Ich versuche virtualenv zu drehen, und das --no-site-packages Flagge scheint nichts mit Ubuntu zu tun. Ich installierte virtualenv 1.3.3 mit easy_install (die ich aufgerüstet habe setuptools 0.6c9) und alles scheint installiert werden, um /usr/local/lib/python2.6/dist-packages

I übernehmen , dass, wenn ein Paket mit apt-get installieren, es in /usr/lib/python2.6/dist-packages/ gesetzt wird?

Das Problem ist, gibt es eine /usr/local/lib/python2.6/site-packages auch, dass gerade dort sitzt leer zu sein. Es scheint (von am path in einem virtualenv suchen), dass dies der Ordner ist virtualenv als Backup verwendet. So dachte sogar, ich auslassen --no-site-packages, ich kann meine lokalen Systeme Pakete von jedem meiner virtualenv den Zugriff.

Also meine Fragen sind:

  1. Wie erhalte ich virtualenv einem der dist-packages zu zeigen?
  2. Welche dist-Pakete sollte ich darauf, es zu? /usr/lib/python2.6/dist-packages oder /usr/local/lib/python2.6/dist-packages/
  3. Was ist der Punkt der /usr/lib/python2.6/site-packages? Es gibt nichts drin!
  4. Ist es zuerst kommt, mahlt zuerst auf dem Weg? Wenn ich eine neuere Version von Paket XYZ habe in /usr/local/lib/python2.6/dist-packages/ installiert und und älteren (von ubuntu repos / apt-get) in /usr/lib/python2.6/dist-packages, die man importiert wird, wenn ich import xyz? Ich gehe davon aus das ist auf dem Weg Liste basiert, nicht wahr?
  5. Warum ist der Teufel so verwirrend? Gibt es etwas, was ich bin fehlt hier?
  6. Wo ist definiert, dass easy_install sollte /usr/local/lib/python2.6/dist-packages installieren?
  7. Wird diese pip auch aus?

Danke an alle, die diese aufklären können!

War es hilfreich?

Lösung

Ich würde versucht sein, es zu hacken durch site-packages einen Link zu machen, um dist-Pakete, aber ich denke, die anderen Fälle beeinträchtigen könnte, wo Sie einige andere Erweiterung als von dem ubuntu dist installieren mögen. Ich kann mich an einem anderen Antwort zu 1 mit der Ausnahme virtualenv die Quellen Tweaking (sowohl mit ubuntu und virtualenv so beliebt zu sein, würde ich nicht überrascht, gezwickt Versionen bereits finden existieren).

Re 2, wenn Sie / usr / local verwenden / bin / python sollten Sie das Verzeichnis / usr / local Version der lib (einschließlich Website-Pakete) verwenden und umgekehrt, wenn Sie mit / usr / bin / python .

Re 3, wird es etwas sein, wenn Sie jemals für / usr / bin / python aus Quellen, eine Erweiterung installieren (nicht über easy_install oder aus Ubuntus Distro).

Re 4, ja, frühe Einträge auf dem Weg Vorrang haben.

Re 5, ist easy_install einfach nur in seinem Namen - es macht so viel dunkle Magie, die es trotz ihrer Zweckmäßigkeit gehalten aus der Standard-Python-Bibliothek ist, weil der Konsens unter uns Python Committer ist, dass tiefere dunkle Magie für Bequemlichkeit "easy" nur an der Oberfläche.

Re 6, ich denke, das ist eine ubuntu Modifikation easy_install -. Wenn das stimmt, dann ist es definiert ist, wo Canonical oder anderer ubuntu Maintainer ihre kollektiven Entscheidungen treffen

Re 7, sorry, keine Ahnung - ich habe keinen vernünftigerweise letzten ubuntu zur Hand zu überprüfen

.

Andere Tipps

Ich glaube, Mike Orr Antwort von die virtuelle-env-Mailingliste scheint der beste zu sein. Beachten Sie die OP veröffentlicht diese Frage in beiden Orten.

Original Inhalt der Mail:

Vor Jahren Debian erstellt / usr / local / lib / pythonVERSION / site-packages, und der Python binär kompiliert ist es in der Standard-Suche Pfad. Ubuntu gefolgt von Debian in Führung, als es normalerweise der Fall ist. der Python Entwickler mochte das nicht, weil Sie eine Störung mit einem bekommen lokal installierten / usr / local / bin / python die gleichen Website-Pakete mit Verzeichnis. Ubuntu schließlich beschlossen, Website-Pakete und die Nutzung zu verzichten dist-Pakete statt, ein Name, den sie würde es so nicht erfunden mit etwas stören. Die loing Geschichte ist irgendwo da draußen, wenn Sie Google es, irgendwo in der Tracker Python Bug oder distutils SIG oder so.

Das System funktioniert, zumindest wenn man die Ubuntu virtualenv Paket verwenden. Einige Leute hatten Probleme mit einem lokal installierten virtualenv auf Ubuntu, weil die Magie sys.path Einträge wurden nicht hinzugefügt oder etwas. Ich bin nicht sicher über --no-site-packages, weil ich nie verwenden diese Option: Ich PIL und mysqldb aus den Ubuntu-Pakete laufen, weil sie kann schwierig sein, ihre C Abhängigkeiten manchmal zu kompilieren. (Braucht den rechts-Header-Dateien, Python ist die Header-Dateien zu ignorieren, etc.)

So Ubuntu Python-Pakete gehen in / Usr / lib / pythonVERSION / dist-Pakete. Oder dass python-support Verzeichnis aus irgendeinem Grund. Lokal installierte Python-Pakete gehen in / Usr / local / lib / pythonVERSION / dist-Pakete standardmäßig. Immer wenn ich installieren Sie ein Ubuntu 9.04 System, das ich laufen:

$ sudo apt-get install python-Setuptools (6.0c9) $ Sudo apt-get install python-virtualenv (1.3.3) $ Sudo easy_install pip $ Sudo pip installieren virtualenvwrapper

Die virtualenvs funktionieren auf diese Weise, obwohl ich --no-site-packages nicht versucht haben.

  

Ich versuche virtualenv zu drehen, und die --no-site-packages Flagge   scheint nichts mit Ubuntu zu tun. Ich installierte virtualenv 1.3.3 mit   easy_install (die ich auf Setuptools aktualisiert haben 0.6c9)

Diese Versionen sind sowohl in Ubuntu 9.04, so dass Sie machen es schwieriger, auf Sie sich von ihnen vor Ort zu installieren.

  

und alles   scheint zu /usr/local/lib/python2.6/dist-packages installiert werden

Ja

  

Ich gehe davon aus, dass, wenn ein Paket mit apt-get installiert, ist es platziert in /   usr / lib / python2.6 / dist-packages /?

Ja

  
      
  1. Ist es zuerst kommt, mahlt zuerst auf dem Weg? Wenn ich eine neuere   Version Paket XYZ installiert in /usr/local/lib/python2.6/dist-   packages / und und ältere (von ubuntu repos / apt-get) in / usr / lib /   python2.6 / dist-Pakete, die man importiert wird, wenn ich xyz importieren?   Ich gehe davon aus das ist auf dem Weg Liste basiert, nicht wahr?
  2.   

sys.path wird gescannt, um. Die einzige Komische ist, dass .pth Eier setzte früher oder später in dem Weg bekommen, als manche Leute erwarten. Doch wenn Sie verwenden für alles pip kann es tun (das heißt außer pip installieren selbst, vorkompilierte Eier, und eine Momentaufnahme eines lokalen Verzeichnisses, das eine ist Kopie und nicht als Ei-Link), werden Sie nicht ohnehin viele .pth Eier haben.

  
      
  1. Warum ist der Teufel so verwirrend? Gibt es etwas, was ich bin   fehlt hier?
  2.   

Es ist nicht gut dokumentiert. Habe ich es heraus, indem die Bahn zu scannen.

  
      
  1. Wird auch diese beeinflussen pip?
  2.   

Ja, pip wird automatisch installiert zu / Usr / local / lib / pythonVERSION / site-packages. Verwenden Sie „pip installieren -E $ VIRTUAL_ENV Paket“zu installieren, in eine virtualenv.

Sie sollten wirklich nicht Ubuntu Python-Installation berühren, wenn Sie System Admin-Tools bauen, oder etwas zu bauen, die in Betracht gezogen werden könnten ein neuer System-Service sein.

Wenn Sie Ubuntu verwenden Python-Anwendungen zu entwickeln oder einsetzen, immer bauen Sie Ihren eigenen Python von der Quelle, Teer es auf, und zu verwenden, die für die Bereitstellung. Auf diese Weise werden Sie alle Verzeichnisse an der richtigen Stelle haben und virtualenv werden in der Regel arbeiten. Wenn Sie mehr Python-Anwendungen auf dem Server bereitgestellt werden sollen, dann Python machen lebte in einem 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 haben (users?), So dass die Menschen leicht Pakete hinzufügen können.

Auf diese Weise können Sie auch zwei Reihen von Paketen haben. Diejenigen, die Ihre internen Standard-Tools sind in Ihrer Python-Distribution und seinen Teil des Tarball installiert werden, die Sie bereitstellen, und nur die App-spezifische Pakete in einem virtualenv sein würden.

Sie nicht aktualisieren oder das Ubuntu-System installiert Python ändern.

Nun, ich habe ein Ubuntu 9.04 und schnell versucht ein paar Sandkästen mit Website-Pakete Einrichtung und eine ohne. Und die Dinge arbeiten gut.

Der einzige Unterschied in der Herangehensweise habe ich verwenden ich Ubuntu Python-virtualenv Paket (1.3.3). Und davon ausgeht, dass es von Ubuntu-Team gezwickt Ubuntu-Setups zu entsprechen.

So deaktivieren Sie easy_installed virtualenv für eine Weile zusammenzufassen, Verwendung verpackt python-virtualenv und sehen, ob das Ihren Erwartungen entspricht.

In der Tat verwenden wir ähnliche Einrichtung für die Produktion ohne Probleme. Rest ist bereits beantwortet von Alex.

Eine andere Möglichkeit, es zu beheben:
https://stackoverflow.com/a/17265840/202168

Haben Sie sich daran zu erinnern, dass in jedem virtualenv zu tun, wo Sie es brauchen, aber setzt nicht auf Hacks oder eine spezielle Version von virtualenv

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top