2015-05-19 14 views
5

Ich bin nicht mehr in der Lage, ein bereits in Ubuntu 15.04 installiertes Paket zu aktualisieren. Pip funktioniert immer noch und installiert das Paket in /usr/local/python2.7/dist-packages, aber der Pfad listet /usr/python2.7/dist-packages an der Spitze, und selbst PYTHONPATH kann nicht etwas über diese Linie bekommen. Ich glaube das funktioniert bei älteren Ubuntus. Ich habe versucht, etwas in /usr/python/site.py zu finden, aber es scheint das Richtige zu tun. Das Hinzufügen von -S scheint zu verhindern, dass die nicht-lokale Version oben ist. Ich habe das auf zwei Computern gesehen, glaube ich.Pip kann kein integriertes Paket in Ubuntu aktualisieren 15.04

Einige Beispiele für die Notwendigkeit: Aktualisieren, um eine erforderliche Funktion/Bugfix (für PILLOW, in meinem Fall) ohne APT eine Reihe von Paketen zu deinstallieren, die dieses Paket als Voraussetzung auflisten.

Bearbeiten: Zur Klarstellung lautet die Frage: Ich möchte die Verzeichnissuchreihenfolge neu anordnen, um Ubuntu 14.10 Verhalten wiederherzustellen. Es gibt bessere Möglichkeiten, dies auf vielen Systemen zu tun, aber ich möchte das integrierte apt-Paket nur mit einem oder zwei (möglichen) neueren Paketen wie IPython und ähnlichem verwenden, anstatt virtual-env und Anacoda (beide was ich auf anderen Systemen verwende). Es sieht so aus, als ob mein gewünschtes Verhalten das dokumentierte Debian-Verhalten ist, also bin ich mir nicht sicher, warum es den Pfad neu anordnet.

Hier ist der Weg, das Problem zu demonstrieren, bemerken die PYTHONPATH Variable in der Mitte, mit zwei git Ordner:

>>> sys.path 
['', 
'/usr/lib/python2.7/dist-packages', 
'/usr/local/lib/python2.7/dist-packages/requests-2.6.0-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/octave_kernel-0.10.0-py2.7.egg', 
'/home/username/git/maya', 
'/home/username/git/udaq/pyUDAQ', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 
'/usr/lib/python2.7/dist-packages/wx-3.0-gtk2'] 

Als Referenz ich ein passendes System 14.04 ausgeführt wird, und es hat genau die erwartete Verhalten. Die beiden PYTHONPATH Dirs kommen zuerst, dann später die lokale dist-packages sind über dem eingebauten.

+4

Ich denke, 'pip' und' apt' Kampf über Pakete ist eine sehr schlechte Idee. Ein viel saubererer Weg wäre, stattdessen zu 'virtualenvs' zu wechseln. – cel

+0

Ich möchte meinen Computer jemandem übergeben können, der Anweisungen befolgt, aber nicht viel weiß. Ihm "ipython notebook" zu sagen ist einfacher, als ihm zu sagen, dass er zuerst ein virtuelles env aktivieren soll. Das ist im Allgemeinen eine gute Idee. –

+0

In diesem Fall: Wechseln Sie zu "Anaconda" und installieren Sie die Pakete in der Root-Umgebung.Dann sind 'conda' und' pip' nun deine Paketmanager und 'apt' wird nicht stören. – cel

Antwort

2

Es gibt eine -t switch in pip. Sie können ein Verzeichnis konfigurieren, in dem pip Pakete installiert.

Sie können das Verzeichnis in einem config file einstellen und vergessen es jedes Mal zu spezifizieren, welches Sie installieren oder aktualisieren Pakete

Aber in der Regel ist es eine schlechte Idee Pakete von apt

+0

Ich möchte die Pakete in '/ usr/python' nicht planieren, ich möchte nur'/usr/local/python' zuerst suchen lassen. Trotzdem danke! –

+1

@HenrySchreiner Ok, aber dann bin ich überrascht, weil Pfade von 'PYTHONPATH' zu' sys.path' vor Standardinterpreterpfaden hinzugefügt werden. Können Sie Ihren Beitrag mit weiteren Informationen aktualisieren? Wie änderst du 'PYTHONPATH' und was gibt' sys.path' aus? – Alik

+0

@HenrySchreiner [relevante Dokumentation Link] (https://docs.python.org/2/tutorial/modules.html#the-module-search-path) – Alik

2

Verwendung installiert Upgrade virtualenv:

installieren virtualenv

$ sudo apt-get install python-virtualenv 

erstellen Umgebung in MYENV Verzeichnis

$ virtualenv MYENV 

activate Umgebung in aktuellen Shell (Ihre App wird dies auch müssen auf das Startskript ist)

$ . MYENV/bin/activate 

Verwendung pip/Python von Ihrem Venv befindet sich in MYENV Verzeichnis (Sie besitzen)

(MYENV)$ pip ... 
+0

Wenn du auf Ubuntu und 16.04 oder neuer bist, wirst du wahrscheinlich 'sudo apt-get installieren virtualenv' anstelle von' python-virtualenv' wollen –

Verwandte Themen