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?
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:
ipython
und diese Warnung gesehenHier sind die relevanten Informationen und warum hash -r
das Problem behoben hat:
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!
Hilfreichster Kommentar
Es ist möglich, dass die Lösung so einfach wie
hash -r
ist, können Sie das versuchen?