Ipython: IPython in virtualenv installiert. WARNUNG "Bitte installieren Sie IPython innerhalb des virtualtenv"

Erstellt am 14. März 2013  ·  14Kommentare  ·  Quelle: ipython/ipython

Ich habe die neueste stabile Version von IPython in einer virtuellen Umgebung installiert, die mit der neuesten stabilen Version von virtualenv auf dem neuesten Python 2.7 erstellt wurde, und ich erhielt immer noch eine Warnung, dass ich IPython in der virtuellen Umgebung installieren sollte.

Im Zweifelsfall habe ich eine virtuelle Umgebung erstellt und mit source [virtenv]/bin/activate aktiviert und dann mit pip install ipython ipython installiert. Um sicherzustellen, dass ich das richtige Ipython ausführe, habe ich which ipython gemacht, es zeigt korrekt auf die ipython -Binärdatei in der virtuellen Umgebung. Wenn ich jedoch ipython , bekomme ich WARNING message :

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv .

Warum bekomme ich die Warnung?

needs-info

Hilfreichster Kommentar

Es ist möglich, dass die Lösung so einfach wie hash -r ist, können Sie das versuchen?

Alle 14 Kommentare

Versuchen Sie, diese aus IPython heraus zu drucken:

import os, sys, IPython
print os.environ['VIRTUAL_ENV']
print sys.executable
print IPython.__file__
print sys.path

Danke @minrk. Unten sind die Ausgaben:

Bevor ich IPython von der Befehlszeile aus aufrufe, zeigt meine Eingabeaufforderung korrekt Folgendes an:
([name of virtual env]) [my regular prompt]

Dann, sobald ich in IPython bin:

print os.environ['VIRTUAL_ENV']
# correctly prints the path to the environment 

print sys.executable
# Prints the external path to Python (?)

print IPython.__file__
# Prints the external path to the ipython installation's __init__.pyc (?)

print sys.path
# Prints the path to the site-packages folder from the virtualenv at the top.
# Then the bin path of the Python's external installation (?)
# Then some paths to individual packages from the external installation (?)
# Then the paths to individual packages from the virtualenv (and it misses the virtualenv's installation of IPython, ?)
# Then a few more paths to individual packages of the external installation (?)
# Finally the IPython from the external installation (?)

Wenn ich meine IPython-Sitzung verlasse, wird meine Eingabeaufforderung korrekt wie folgt angezeigt:
([name of virtual env]) [my regular prompt]

Zur Verdeutlichung: Wenn ich externe Installation _ sage, meine ich eine Installation _nicht * innerhalb der virtuellen Umgebung und auch nicht Teil einer Systeminstallation, sondern eine, die ich oben in $PATH und $LD_LIBRARY_PATH eingefügt habe

Vielleicht gibt es eine Umgebungsvariable, die mir fehlt und die IPython verwirrt, zu glauben, dass ich die Systeminstallation und nicht die externe Installation verwende, die ich in Kombination mit meiner virtuellen Umgebung verwenden möchte und die ich am Anfang von PATH einfüge LD_LIBRARY_PATH ?

was bekommt man mit head $(which ipython) ?

noch eins: sys.argv

Wenn sys.executable falsch ist, sind die Dinge schief gelaufen, bevor Python-Pakete geladen wurden. Genau das würde passieren, wenn das System ipython statt eines in der Umgebung installiert wäre (z. B. wenn Sie /usr/bin/ipython mit aktiver Umgebung ausgeführt haben, was wir alle mit schlechtem Benehmen erwarten sollten).

Es ist möglich, dass die Lösung so einfach wie hash -r ist, können Sie das versuchen?

Danke @minrk. head $(which ipython) gibt zurück:

#!/path_to_my_virtual_env/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.13.1','console_scripts','ipython'
__requires__ = 'ipython==0.13.1'
import sys
from pkg_resources import load_entry_point

sys.exit(
   load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
)

Und print sys.argv gibt den Pfad zur externen Python-Installation zurück.

Das Ausführen hash -r vom Terminal aus scheint funktioniert zu haben!

Jetzt bekomme ich aber eine andere Warnung
WARNING: IPython History requires SQLite, your history will not be saved

was interessant ist, da ich diese Meldung nicht erhalte, wenn ich meine virtualenv deaktiviere und ipython von der externen Installation aus starte.

Ich nehme an, das hast du getan:

  1. Sie haben ipython und diese Warnung gesehen
  2. Sie haben ipython in die env installiert
  3. In derselben Shell-Sitzung haben Sie erneut versucht, ipython auszuführen

Hier sind die relevanten Informationen und warum hash -r das Problem behoben hat:

  • Der Pfad der Befehle wird zwischengespeichert, nachdem Sie sie aufgerufen haben, sodass Ihr PATH nicht mehr als einmal in einer Shell-Sitzung nach einem bestimmten Befehl durchsucht wird.
  • which ist sich dieses Caches nicht bewusst, daher zeigt which ipython nicht unbedingt auf das ipython , das aufgerufen wird, wenn es zuvor in der Shell-Sitzung aufgerufen wurde.
  • hash -r setzt einfach diesen Cache zurück, sodass which wieder korrekt ist.

Welches Python haben Sie für sqlite für die virtuelle Umgebung verwendet?

@minrk Ja, das ist richtig! Danke. Ich verwende Python 2.7 x64

Hast du Python selbst gebaut? Wenn dies der Fall ist, müssen Sie sicherstellen, dass libsqlite vorhanden und verfügbar ist, wenn Sie Python kompilieren.

Danke @minrk. libsqlite scheint für das externe IPython verfügbar zu sein, dh dasjenige, das ich ausführe, wenn ich die virtuelle Umgebung nicht aktiviere (obwohl dies nicht dasjenige aus der Systeminstallation ist, da ich PATH geändert habe und LD_LIBRARY_PATH , um eine externe Installation oben einzuschließen). Abgesehen davon schätze ich, dass es möglich ist, dass das externe IPython libsqlite aus der Systeminstallation verwendet (wahrscheinlich aus anderen Pfaden in LD_LIBRARY_PATH ). Wird das möglich sein?

Auf jeden Fall nochmals vielen Dank für all Ihre Hilfe. Das ursprüngliche Problem, das ich gemeldet habe, ist gelöst, sodass wir das Ticket sicher schließen können.

Es ist im Allgemeinen ein Problem mit der Kompilierzeit - ich denke, Sie brauchen die Header usw. (Sie können es nicht beheben, ohne Python neu zu kompilieren).

Ich habe die .py-Profil-Executive-Software auf Notebook eingestellt, sodass sie nie ausgeführt wurde!
Dann finde ich es!
Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen