ipython czyta nieprawidłową wersję Pythona


103

Mam problem z Pythonem, iPythonem i bibliotekami. Poniższe punkty pokazują łańcuch problematyki. Używam Pythona 2.7 na Mac Lion.

  1. iPython nie czyta bibliotek scipy, matplotlib, ale czyta numpy.
  2. Aby to naprawić, próbowałem zainstalować wersję kodu źródłowego Pythona i sprawiło mi to tylko więcej problemów, ponieważ teraz mam dwie różne wersje: 2.7.1 i 2.7.2
  3. Zauważyłem, że uruchamianie Pythona używa wersji 2.7.2 i importuje scipy, matplotlib i numpy, ale w iPythonie jest to wersja 2.7.1, która nie otwiera scipy ani matplotlib.

Wypróbowałem kilka rzeczy, które napotkałem na innych blogach. Ale żaden z nich nie pomógł, a także niestety nie bardzo wiem, co z niektórymi robię. Na przykład: próbowałem odinstalować i ponownie zainstalować ipython za pomocą easy_install i pip. Próbowałem również przeinstalować wszystko przez homebrew i zmodyfikować ścieżkę .bash_profile.


6
ipythonSkrypt jest „przywiązany” do konkretnej wersji Pythona został zainstalowany z - nie przełączy się automatycznie co zainstalowany jako ostatni. Jeśli najpierw zainstalowałeś 2.7.1, następnie IPython, a następnie 2.7.2 ze źródła, Twój IPython będzie nadal używać 2.7.1. Musisz albo cofnąć wszystkie swoje wymachy, wrócić do oryginalnej wersji Pythona i dowiedzieć się, jaka była przyczyna za punktem 1; alternatywnie, zainstaluj ponownie IPython, używając dowolnej instalacji Pythona, która może uzyskać dostęp do potrzebnych bibliotek.
millimoose

Czy mógłbyś być bardziej konkretny? ... dzięki
Diego-MX

1
Konkretnie o której części? Jak działa uruchamianie IPythona lub jak rozwiązać problem?
millimoose

1
Zasadniczo, po zainstalowaniu dowolnego „programu” w języku Python, takiego jak IPython lub nawet easy_install, skrypt startowy programu jest ustawiony tak, aby zawsze używał pliku wykonywalnego Pythona, z którym został zainstalowany. Tak więc, jeśli miałeś Pythona 2.7.1 bez swoich bibliotek, a następnie zainstalowałeś IPython, IPython jest instalowany „w” instalacji Pythona 2.7.1, a łącze do ipythonpliku wykonywalnego jest umieszczane w PATH. Jeśli następnie zainstalujesz Python 2.7.2 ze źródła, będzie to nowa, oddzielna kopia Pythona, nie zaktualizuje istniejącej wersji 2.7.1, która zawiera IPython. Więc IPython nie zobaczy kopii 2.7.2 ani żadnych zawartych w niej bibliotek.
millimoose

1
Biblioteki działają tak samo. Jeśli zainstalowałeś numpy itp. Po zainstalowaniu Pythona 2.7.2 ze źródła, prawdopodobnie zostały one zainstalowane w katalogu 2.7.2. Oznacza to, że wersja Pythona 2.7.1 w ogóle nie widziałaby tych bibliotek. Ponieważ IPython został zainstalowany wraz z wersją 2.7.1, nie mógł również zobaczyć tych bibliotek. Zasadniczo możesz mieć w swoim systemie dowolną liczbę całkowicie oddzielnych kopii Pythona, ale śledzenie, która z nich jest używana do czego, może być trudne. Jeśli nie wiesz, co robisz, najlepiej zacząć od wbudowanej wersji Pythona i po prostu ponownie zainstalować brakujące biblioteki
millimoose

Odpowiedzi:


147

Dobra szybka naprawa:

which python

daje ci /usr/bin/python, prawda? Robić

which ipython

i założę się, że tak będzie /usr/local/bin/ipython. Zajrzyjmy do środka:

Edycja 07.09.16 - plik wygląda teraz następująco:

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())

I moje działa poprawnie w ten sposób, ale moja sytuacja nie jest dokładnie taka jak w PO.


Oryginalna odpowiedź - 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 - otwórz /usr/local/bin/ipythonw swoim edytorze (z uprawnieniami) i zmień pierwszą linię na

#!/usr/local/bin/python

zapisz, uruchom iPython, powinien powiedzieć, że używa teraz żądanej wersji.


41
w przypadku wątpliwości python -m IPythonjest równoważne z ipythonoczekiwaniem, że na pewno używasz właściwego języka Python.
Matt

2
pamiętaj też o zamknięciu terminala i otwarciu nowego. ponieważ PATH jest buforowany przez powłokę w celu zwiększenia wydajności. w ten sposób sprawiłem, że to rozwiązanie działa dla mnie. zobacz: conda.pydata.org/docs/…
parsethis

@Matt. Ja też doświadczyłem. Mój przypadek to „python -m IPython” spowoduje wywołanie odpowiedniej wersji, którą chciałem. Ale po prostu „ipython” uruchomił kopię używającą starego pythona2. Tajemnica polega na tym, że jeśli zrobię „który ipython”, wskazuje on na kopię virtualenv z najwyraźniej poprawną zawartością pliku Pythona.
kawingkelvin

15

Publikowanie komentarza @ Matta jako odpowiedzi, aby był bardziej widoczny

python -m IPython

Ładuje ipython jako moduł z dowolnym pythonem, który jest dostępny w ścieżce jako pierwszy. W moim przypadku miałem jeden preinstalowany i jeden dodałem z naparu. To po prostu działa doskonale.


Być może nie jest to odpowiedź na to pytanie, ale to jest odpowiedź na pytanie: „jak uruchomić ipythona z zainstalowaną dowolną wersją Pythona”. Dzięki.
Salyangoz

9

A co z korzystaniem z virtualenv? Naprawdę to lubie. Może nie jest to szybszy sposób, ale myślę, że jest to bardzo jasne.

Podczas tworzenia virtualenv możesz określić ścieżkę Pythona za pomocą opcji -p.

dla Pythona 2.7

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

dla Pythona 3.4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython

2
To stary wątek, ale spotkałem się też z wirtualnymi wersjami i lubię je przy tworzeniu produktów. Jednak dla celów „codziennej” analizy wolałbym mieć w swoim systemie prostą, użytkową wersję języka Python / ipython.
Diego-MX

1
python -m IPythonrozpocznie ipython z podaną wersjąpython
Xiao

1
Zauważ, że python -m IPythontrzeba to zainstalować:pip install ipython
Xiao

6

Po pierwsze, upewnię się, że używasz właściwego Pythona. W wierszu polecenia wpisz:

which python
python -V

Pierwsza poda ścieżkę, a druga podaje wersję Pythona, której używasz.


Okej, daje mi to Python 2.7.2 w / usr / local / bin / python
Diego-MX

4

Moje rozwiązanie jest proste, głupie, ale działa.

Używam, python -Vaby upewnić się, jaka jest wersja

$ python -V
Python 2.7.10

a następnie utwórz alias w .bash_profile

$ vi ~/.bash_profile

Dodaj linię

alias ipython="python -m IPython"

wtedy otrzymasz ipythonw Pythonie 2.7. 🙂

(Nawiasem mówiąc, my ipythonis install via homebrew, domyślnie będzie działał ipython w Pythonie 3.)

$ brew install ipython


1

Podobna metoda z użyciem pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Teraz pokaże poprawną wersję Pythona

Python 3.4.5

1

Absolutnie najprostsze rozwiązanie, jakie przychodzi mi do głowy, które nie wymaga majstrowania przy środowiskach, zainstalowanych plikach ani w niczym innym, opiera się na faktach, że

  1. Plik wykonywalny ipythonjest w rzeczywistości skryptem w Pythonie.
  2. Pakiet IPython jest instalowany osobno dla każdego interpretera, z którym został uruchomiony pip intall.

Jeśli wersja Pythona, z którą korzystasz, ma zainstalowany pakiet IPython, możesz to zrobić

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

Spowoduje to uruchomienie ipythonskryptu za pomocą odpowiedniego interpretera zamiast tego wymienionego w shebang.


Zamiast wywoływać powyższe za każdym razem, jak ustawić go jako domyślny, aby za każdym razem, gdy piszę ipythonw mojej powłoce, automatycznie czytał niestandardowy interpreter zamiast domyślnego?
Srivatsan

Dodaj skrypt, który to robi, do ścieżki przed domyślną. Ale żeby to zrobić, musisz zadzierać ze środowiskiem.
Mad Physicist,


0

Natknąłem się na ten sam problem, ale poniższe było jedynym rozwiązaniem, które działało dla mnie na OSX 12, Sierra.

ipython zawsze był uruchamiany w Pythonie 3.6, ale potrzebowałem go w wersji 2.7. Nie mogłem znaleźć skryptu startowego ipython dla wersji 2.7, ani nie mogłem znaleźć modułu IPython do wykonania python -m. Żaden z brew instally ipython pip install ipythonlub pip2 install ipythonnie mógł mi dostać wersji 2.7. Więc dostałem to ręcznie.

brew install ipython@5instaluje stąd wersję 2.7 , ale nie umieści jej na twoim, $PATHponieważ wie, że nazwa powoduje konflikt z innym pakietem. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2naprawi to i pozwoli ci po prostu uruchomić ipython2z zachęty powłoki

Dla mnie, ponieważ poważnie podchodziłem do używania ipythona w wersji 2.7, uruchomiłem również następujące polecenia.

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

0

Wszystkie wymienione tutaj odpowiedzi nie pomagają w rozwiązaniu problemu, jeśli używasz anakondy lub innego opakowania środowiska wirtualnego.

Ta odpowiedź opiera się na założeniu, że używasz anakondy.

Załóżmy, że pracujesz w środowisku Python 3 i podczas tworzenia notatnika w notatniku jupyter wyświetla się „Python 2” zamiast „Python 3”.

Dzieje się tak, ponieważ „ipython” jest w istocie skryptem, który jest uruchamiany iw tym skrypcie wspomina, której wersji języka Python używa do wykonania polecenia. Wszystko, co musisz zrobić, to zmienić tę linię, aby ipython używał żądanej wersji Pythona.

Najpierw zatrzymaj serwer ipython i uzyskaj lokalizację pliku wykonywalnego Pythona w bieżącym środowisku za pomocą polecenia „który python”

Mój wynik to:

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

Teraz pobierz lokalizację wykonywalną ipythona, użyj polecenia „który ipython”

mój jest :

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

Zauważ, że używa innej wersji Pythona, tj. python z określonego środowiska z inną wersją języka python, tj. z uruchomionym językiem Python z innego środowiska.

Teraz przejdź do katalogu anaconda2 / bin (dla użytkowników anaconda 3 powinno to być anaconda3 / bin) i wyszukaj plik „ipython”. w tej edycji pierwsza linia wskazuje na aktualną wersję Pythona, którą chcesz. tj. wyjście polecenia „który python”, czyli:

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

Zauważ, że zmieniłem moje środowisko Pythona z py2 (z uruchomionym Pythonem 2.7) na py3 (z Pythonem 3.5).

Zapisz plik. I uruchom notatnik jupyter, teraz podczas tworzenia nowego notatnika opcja „Python 3” powinna być widoczna.

Twoje zdrowie!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.