ipython liest die falsche Python-Version

103

Ich habe Probleme mit Python, iPython und den Bibliotheken. Die folgenden Punkte zeigen die Kette der Problematik. Ich verwende Python 2.7 auf Mac Lion.

  1. iPython liest nicht die Bibliotheken von scipy, matplotlib, aber es liest numpy.
  2. Um dies zu beheben, habe ich versucht, die Quellcode-Version von Python zu installieren, und es gab mir nur mehr Probleme, da ich jetzt zwei verschiedene Versionen habe: 2.7.1 und 2.7.2
  3. Ich habe festgestellt, dass Python ausgeführt wird, Version 2.7.2 verwendet und scipy, matplotlib und numpy importiert, aber auf iPython ist die Version 2.7.1, die scipy oder matplotlib nicht öffnet.

Ich habe verschiedene Dinge ausprobiert, die mir in anderen Blogposts begegnet sind. Aber keiner von ihnen hat geholfen, und leider weiß ich auch nicht genau, was ich mit einigen von ihnen mache. Zum Beispiel: Ich habe versucht, ipython mit easy_install und pip zu deinstallieren und neu zu installieren. Ich habe auch versucht, alles über Homebrew neu zu installieren und den Pfad .bash_profile zu ändern.

Diego-MX
quelle
6
Das ipythonSkript ist an die spezifische Python-Version gebunden, mit der es installiert wurde. Es wechselt nicht automatisch zu der zuletzt installierten Version. Wenn Sie zuerst 2.7.1, dann IPython und dann 2.7.2 von der Quelle installiert haben, verwendet Ihr IPython weiterhin 2.7.1. Sie müssen entweder Ihr gesamtes Dreschen rückgängig machen, zu Ihrer ursprünglichen Python-Version zurückkehren und herausfinden, was der Grund für Punkt 1 war. Alternativ können Sie IPython mit der Python-Installation neu installieren, um auf die benötigten Bibliotheken zugreifen zu können.
Millimoose
Könnten Sie genauer sein? ... danke
Diego-MX
1
Spezifisch zu welchem ​​Teil? Wie funktioniert der IPython-Start oder wie kann das Problem behoben werden?
Millimoose
1
Wenn Sie ein Python- "Programm" wie IPython oder sogar easy_install installieren, verwendet das Startskript für das Programm im Wesentlichen immer die ausführbare Python-Datei, mit der es installiert wurde. Wenn Sie also Python 2.7.1 ohne Ihre Bibliotheken hatten und dann IPython installieren, wird IPython "in" die Python 2.7.1-Installation installiert und ein Link zur ipythonausführbaren Datei wird auf Ihrem PATH platziert. Wenn Sie dann Python 2.7.2 von der Quelle installieren, handelt es sich um eine neue, separate Kopie von Python, die die vorhandene Version 2.7.1 mit IPython nicht aktualisiert. IPython sieht also weder die 2.7.2-Kopie noch Bibliotheken darin.
Millimoose
1
Bibliotheken funktionieren genauso. Wenn Sie numpy usw. nach der Installation von Python 2.7.2 aus dem Quellcode installiert haben, wurden diese wahrscheinlich im Verzeichnis 2.7.2 installiert. Dies bedeutet, dass die Python 2.7.1-Version diese Bibliotheken überhaupt nicht sehen würde. Da IPython mit 2.7.1 installiert wurde, konnten diese Bibliotheken auch nicht angezeigt werden. Grundsätzlich können Sie so viele vollständig separate Kopien von Python auf Ihrem System haben, wie Sie möchten, aber es kann schwierig sein, zu verfolgen, welche für welche verwendet wird. Wenn Sie nicht wissen, was Sie tun, beginnen Sie am besten mit der integrierten Version von Python und installieren Sie einfach fehlende Bibliotheken neu
millimoose

Antworten:

147

Okay, schnelle Lösung:

which python

gibt dir /usr/bin/python, richtig? Machen

which ipython

und ich wette das wird sein /usr/local/bin/ipython. Schauen wir mal rein:

Edit 9/7/16 - Die Datei sieht jetzt so aus:

cat /usr/local/bin/ipython

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from IPython import start_ipython

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(start_ipython())

Und meine funktioniert so richtig, aber meine Situation ist nicht genau wie die der OPs.


Ursprüngliche Antwort - 30.09.13:

cat /usr/local/bin/ipython

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

if __name__ == '__main__':
    sys.exit(
        load_entry_point('ipython==0.12.1', 'console_scripts', 'ipython')()
    )

Aha - öffne /usr/local/bin/ipythonin deinem Editor (mit Berechtigungen) und ändere die erste Zeile in

#!/usr/local/bin/python

Speichern, iPython starten, sollte sagen, dass es die gewünschte Version verwendet.

Manuel Ebert
quelle
41
Im Zweifelsfall python -m IPythonist dies gleichbedeutend mit der ipythonErwartung, dass Sie sicher das richtige Python verwenden.
Matt
2
Denken Sie auch daran, das Terminal zu schließen und ein neues zu öffnen. da der PATH aus Effizienzgründen von der Shell zwischengespeichert wird. So habe ich diese Lösung für mich zum Laufen gebracht. siehe: conda.pydata.org/docs/…
parsethis
@ Matt. Ich habe es auch erlebt. Mein Fall ist "python -m IPython" ruft die richtige Version auf, die ich wollte. Aber nur 'ipython', es wurde eine Kopie gestartet, die altes python2 verwendet. Das Rätsel ist, wenn ich ein "welches Ipython" mache, zeigt es auf eine virtuelle Kopie mit dem scheinbar korrekten Inhalt dieser Python-Datei.
Kawingkelvin
15

Posting @ Matts Kommentar als Antwort, nur damit er besser sichtbar ist

python -m IPython

Lädt ipython als Modul mit dem Python, auf das zuerst im Pfad zugegriffen werden kann. In meinem Fall hatte ich eine vorinstalliert und eine, die ich von Brew hinzugefügt habe. Das funktioniert einfach perfekt.

sh87
quelle
Vielleicht nicht die Antwort auf diese Frage, aber dies ist die Antwort auf die Frage: "Wie wird Ipython mit einer installierten Python-Version ausgeführt?". Vielen Dank.
Salyangoz
9

Was ist mit einer virtuellen Umgebung? Ich mag es wirklich. Vielleicht ist es nicht der schnellere Weg, aber ich denke, es ist sehr klar.

Wenn Sie eine virtuelle Umgebung erstellen, können Sie den Python-Pfad mit dem Flag -p angeben.

für Python 2.7

$ virtualenv -p /usr/bin/python2.7 venv2.7
$ source venv2.7/bin/activate
(venv2.7)$ pip install ipython
(venv2.7)$ ipython

für Python 3.4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython
pvieytes
quelle
2
Dies ist ein alter Thread, aber ich bin auch auf virtuelle Umgebungen gestoßen und mag sie gut für die Entwicklung von Produkten. Für die "alltägliche" Analyse möchte ich jedoch lieber eine direkt verwendbare Version von Python / Ipython in meinem System haben.
Diego-MX
1
python -m IPythonwird ipython mit der gegebenen Version vonpython
Xiao
1
Beachten Sie, python -m IPythondass dies installiert werden muss:pip install ipython
Xiao
6

Zuerst würde ich sicherstellen, dass Sie die richtige Python verwenden. Geben Sie an einer Eingabeaufforderung Folgendes ein:

which python
python -V

Der erste zeigt Ihnen den Pfad, der zweite die Python-Version, die Sie verwenden.

Macduff
quelle
Okay, es gibt mir Python 2.7.2 auf / usr / local / bin / python
Diego-MX
4

Meine Lösung ist einfach, dumm, aber funktioniert.

Ich benutze python -V, um sicherzustellen, welche Version ist

$ python -V
Python 2.7.10

und machen Sie dann einen Alias ​​in .bash_profile

$ vi ~/.bash_profile

Fügen Sie eine Zeile hinzu

alias ipython="python -m IPython"

dann bekommst du eine ipythonin python 2.7. 🙂

(Übrigens, meine ipythonInstallation erfolgt über homebrew, es wird standardmäßig eine Python in Python 3 ausgeführt.)

$ brew install ipython
Johnny
quelle
2

äußerst relevant: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

td; lr Probleme treten aufgrund von Shell-Hashing- und Pfadvariablen auf.

Parsethis
quelle
Eine allgemeine bewährte Methode ist auch die Installation von ipython in der virtuellen Umgebung. Sie which pythonsollten auf die virtuelle Python-Binärdatei verweisen.
Parsethis
Das Shell-Hashing hat mich gebissen, auch nach der Installation von ipython in der virtuellen Umgebung. hash -rreparierte es für mich; Vielen Dank!
theY4Kman
1

Eine ähnliche Methode mit Pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Jetzt wird die korrekte Version von Python angezeigt

Python 3.4.5
Avikd
quelle
1

Die absolut einfachste Lösung, die ich mir vorstellen kann und die kein Herumspielen mit Umgebungen, installierten Dateien oder irgendetwas anderem erfordert, beruht auf den Fakten, die

  1. Die ausführbare Datei ipythonist eigentlich ein Python-Skript.
  2. Das IPython-Paket wird für jeden Interpreter, mit dem Sie ausgeführt haben, separat installiert pip intall.

Wenn in der Python-Version, mit der Sie ausgeführt werden, ein IPython-Paket installiert ist, können Sie dies einfach tun

/path/to/desired/python $(which ipython)

Dadurch wird das ipythonSkript mit dem gewünschten Interpreter anstelle des im Shebang aufgeführten ausgeführt.

Verrückter Physiker
quelle
Wie setze ich die oben genannten Werte nicht jedes Mal auf, sondern setze sie bei jeder Eingabe ipythonin meine Shell automatisch den benutzerdefinierten Interpreter anstelle der Standardeinstellung?
Srivatsan
Fügen Sie dem Pfad vor dem Standard ein Skript hinzu, das dies tut. Aber dafür muss man sich mit der Umwelt anlegen.
Mad Physicist
0

Ich bin auf dasselbe Problem gestoßen, aber das Folgende war die einzige Lösung, die unter OSX 12, Sierra, für mich funktioniert hat.

ipython wurde immer für Python 3.6 gestartet, aber ich brauchte es für 2.7. Ich konnte weder ein Ipython-Startskript für 2.7 noch das IPython-Modul finden, mit dem ich ausgeführt werden kann python -m. Keiner von brew instally ipython pip install ipythonoderpip2 install ipython konnte mir die 2.7 Version besorgen. Also habe ich es manuell bekommen.

brew install ipython@5Installiert die Version 2.7 von hier aus , wird sie jedoch nicht auf Ihre Version übertragen, $PATHda der Name mit einem anderen Paket in Konflikt steht. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2wird dies beheben und Sie einfach laufen lassenipython2 von Ihrer Shell-Eingabeaufforderung

Da ich es ernst meinte, ipython für 2.7 zu verwenden, habe ich auch die folgenden Befehle ausgeführt.

ln -s /usr/local/Cellar/ipython/6.2.1/bin/ipython /usr/local/bin/ipython3
rm -f /usr/local/bin/ipython
ln -s /usr/local/bin/ipython2 /usr/local/bin/ipython
Jeremy Paige
quelle
0

Alle hier genannten Antworten helfen nicht bei der Lösung des Problems, wenn Sie Anaconda oder einen anderen Wrapper für virtuelle Umgebungen verwenden.

Diese Antwort basiert auf der Annahme, dass Sie Anaconda verwenden.

Angenommen, Sie befinden sich in einer Python 3-Umgebung und beim Erstellen eines Notizbuchs auf einem Jupyter-Notizbuch wird "Python 2" anstelle von "Python 3" angezeigt.

Dies liegt daran, dass "ipython" im Wesentlichen ein Skript ist, das ausgeführt wird, und in diesem Skript erwähnt wird, welche Python-Version zum Ausführen des Befehls verwendet wird. Sie müssen lediglich diese Zeile ändern, damit ipython die gewünschte Python-Version verwendet.

Stoppen Sie zuerst den ipython-Server und ermitteln Sie den Speicherort der ausführbaren Python-Datei der aktuellen Umgebung mit dem Befehl "which python".

Meine Ausgabe ist:

/home/sourabh/anaconda2/envs/py3/bin/python

Holen Sie sich nun den ausführbaren Speicherort von ipython und verwenden Sie den Befehl "which ipython".

meins ist :

/home/sourabh/anaconda2/envs/py2/bin/python

Beachten Sie, dass eine andere Version von Python verwendet wird, z. Python aus einer bestimmten Umgebung, in der eine andere Version von Python ausgeführt wird, dh Python aus einer anderen Umgebung.

Navigieren Sie nun zum Verzeichnis anaconda2 / bin (für Anaconda 3-Benutzer sollte es anaconda3 / bin sein) und suchen Sie nach der Datei "ipython". In dieser Bearbeitung verweisen Sie in der ersten Zeile auf die aktuelle Python-Version, die Sie möchten. dh die Ausgabe von "welche Python" dh:

#!/home/sourabh/anaconda2/envs/py3/bin/python

Beachten Sie, dass ich meine Python-Umgebung von py2 (mit Python 2.7) auf py3 (mit Python 3.5) geändert habe.

Speicher die Datei. Und führen Sie jupyter notebook aus. Wenn Sie jetzt ein neues Notebook erstellen, sollte die Option "Python 3" sichtbar sein.

Prost!

100rabh
quelle