ipython membaca versi python yang salah

103

Saya mengalami masalah dengan Python, iPython dan perpustakaan. Poin-poin berikut menunjukkan rantai problematika. Saya menjalankan Python 2.7 di Mac Lion.

  1. iPython tidak membaca perpustakaan scipy, matplotlib, tetapi membaca numpy.
  2. Untuk memperbaikinya, saya mencoba menginstal versi kode sumber Python, dan itu hanya memberi saya lebih banyak masalah karena sekarang saya memiliki dua versi berbeda: 2.7.1 dan 2.7.2
  3. Saya perhatikan bahwa menjalankan Python, menggunakan versi 2.7.2 dan mengimpor scipy, matplotlib, dan numpy, tetapi di iPython versinya adalah 2.7.1 yang tidak membuka scipy atau matplotlib.

Saya sudah mencoba beberapa hal yang saya temui dari postingan blog lain. Tapi tidak ada yang membantu, dan sayangnya saya tidak begitu tahu apa yang saya lakukan dengan beberapa dari mereka. Misalnya: Saya mencoba menghapus dan menginstal ulang ipython dengan easy_install dan pip. Saya juga mencoba menginstal ulang semuanya melalui homebrew, dan memodifikasi jalur .bash_profile.

Diego-MX
sumber
6
The ipythonScript adalah "terikat" dengan versi tertentu Python itu dipasang dengan - itu tidak akan secara otomatis beralih ke apa yang Anda diinstal terakhir. Jika Anda pertama kali menginstal 2.7.1, lalu IPython, lalu 2.7.2 dari sumber, IPython Anda akan tetap menggunakan 2.7.1. Anda harus membatalkan semua flailing Anda, kembali ke versi Python asli Anda dan mencari tahu alasan di balik poin 1; bergantian, instal ulang IPython menggunakan instalasi Python mana pun yang dapat mengakses pustaka yang Anda butuhkan.
millimoose
Bisakah Anda lebih spesifik? ... terima kasih
Diego-MX
1
Spesifik tentang bagian mana? Bagaimana cara kerja startup IPython, atau bagaimana cara mengatasi masalah?
millimoose
1
Pada dasarnya, saat Anda menginstal "program" python apa pun, seperti IPython atau bahkan easy_install, skrip startup untuk program tersebut diatur untuk selalu menggunakan python yang dapat dieksekusi yang telah diinstal dengannya. Jadi, jika Anda memiliki Python 2.7.1 tanpa perpustakaan Anda, dan kemudian menginstal IPython, IPython diinstal "ke" instalasi Python 2.7.1, dan tautan ke yang ipythondapat dieksekusi ditempatkan pada PATH Anda. Jika Anda kemudian menginstal Python 2.7.2 dari sumber, itu adalah salinan baru Python yang terpisah, itu tidak akan meningkatkan versi 2.7.1 yang ada yang memiliki IPython di dalamnya. Jadi IPython tidak akan melihat salinan 2.7.2, atau pustaka apa pun di dalamnya.
millimoose
1
Perpustakaan bekerja sama. Jika Anda menginstal numpy etc. setelah menginstal Python 2.7.2 dari sumbernya, kemungkinan besar mereka diinstal ke direktori 2.7.2. Ini berarti bahwa versi Python 2.7.1 tidak akan melihat pustaka tersebut sama sekali. Karena IPython diinstal dengan 2.7.1, ia juga tidak dapat melihat pustaka itu. Pada dasarnya, Anda dapat memiliki sebanyak mungkin salinan Python yang benar-benar terpisah di sistem Anda seperti yang Anda inginkan, tetapi akan sulit melacak mana yang digunakan untuk apa. Kecuali Anda tahu apa yang Anda lakukan, yang terbaik adalah memulai dengan versi built-in Python, dan hanya menginstal ulang pustaka yang hilang
millimoose

Jawaban:

147

Oke perbaikan cepat:

which python

memberimu /usr/bin/python, kan? Melakukan

which ipython

dan saya yakin itu akan terjadi /usr/local/bin/ipython. Mari kita lihat ke dalam:

Edit 9/7/16 - File tersebut sekarang terlihat seperti ini:

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

Dan saya bekerja dengan baik seperti ini, tetapi situasi saya tidak persis seperti OP.


Jawaban asli - 30/9/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 - buka /usr/local/bin/ipythondi editor Anda (dengan hak istimewa), dan ubah baris pertama menjadi

#!/usr/local/bin/python

simpan, mulai iPython, harus mengatakan itu menggunakan versi yang Anda inginkan sekarang.

Manuel Ebert
sumber
41
diragukan lagi, python -m IPythonsama dengan ipython, harap Anda yakin menggunakan Python yang benar.
Matt
2
ingat juga untuk menutup terminal dan membuka yang baru. karena PATH di-cache oleh shell untuk efisiensi. ini adalah bagaimana saya mendapatkan solusi ini bekerja untuk saya. lihat: conda.pydata.org/docs/…
parsethis
@Tokopedia Saya juga mengalami. Kasus saya adalah "python -m IPython" akan memanggil versi yang benar yang saya inginkan. Tapi hanya 'ipython', itu memulai salinan yang menggunakan python2 lama. Misterinya adalah jika saya melakukan "yang ipython", itu menunjuk ke salinan virtualenv dengan konten file python itu tampaknya benar.
kawingkelvin
15

Posting komentar @ Matt sebagai jawaban supaya lebih terlihat

python -m IPython

Memuat ipython sebagai modul dengan python apa pun yang dapat diakses di jalur terlebih dahulu. Dalam kasus saya, saya memiliki satu pra-instal dan yang saya tambahkan dari minuman. Ini bekerja dengan sempurna.

sh87
sumber
Mungkin bukan jawaban untuk pertanyaan ini tetapi ini adalah jawaban untuk pertanyaan: "bagaimana menjalankan ipython dengan versi python apa pun yang diinstal". Terima kasih.
Salyangoz
9

Bagaimana dengan menggunakan virtualenv? Aku benar-benar menyukainya. Mungkin ini bukan cara yang lebih cepat, tapi menurut saya ini sangat jelas.

Saat Anda membuat virtualenv, Anda dapat menentukan jalur python dengan flag -p.

untuk python 2.7

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

untuk 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.dll
sumber
2
Ini adalah utas lama, tetapi saya juga telah menemukan virtualenv dan menyukainya bagus untuk mengembangkan produk. Untuk tujuan analisis "sehari-hari", saya lebih suka memiliki versi python / ipython yang langsung dapat digunakan di sistem saya.
Diego-MX
1
python -m IPythonakan memulai ipython dengan versi yang diberikan daripython
Xiao
1
perhatikan bahwa python -m IPythonperlu ini dipasang:pip install ipython
Xiao
6

Pertama, saya akan memastikan Anda menggunakan python yang benar. Pada jenis prompt perintah:

which python
python -V

Yang pertama akan memberi tahu Anda jalurnya, yang kedua memberi tahu Anda versi Python yang Anda gunakan.

macduff
sumber
Oke jadi, ini memberi saya Python 2.7.2 di / usr / local / bin / python
Diego-MX
4

Solusi saya sederhana, bodoh tapi berhasil.

Saya gunakan python -Vuntuk memastikan versi apa

$ python -V
Python 2.7.10

dan kemudian buat alias di .bash_profile

$ vi ~/.bash_profile

Tambahkan garis

alias ipython="python -m IPython"

maka Anda akan mendapatkan ipythondi python 2.7. 🙂

(Ngomong-ngomong, saya ipythonmenginstal melalui homebrew, secara default akan menjalankan ipython di python 3.)

$ brew install ipython
Johnny
sumber
2

sangat relevan: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

td; masalah lr ditemui karena shell 'hashing' dan variabel path.

parsethis
sumber
juga praktik umum yang baik adalah menginstal ipython di virtualenv. Anda which pythonharus menunjuk ke biner python virtualenv.
parsethis
Hash shell menggigit saya, bahkan setelah menginstal ipython di dalam virtualenv. hash -rmemperbaikinya untuk saya; Terima kasih!
theY4Kman
1

Metode serupa menggunakan pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Sekarang ini akan menunjukkan versi python yang benar

Python 3.4.5
Avikd
sumber
1

Solusi paling sederhana yang dapat saya pikirkan, yang tidak perlu mengutak-atik lingkungan, file yang diinstal, atau apa pun, bergantung pada fakta bahwa

  1. Eksekusi ipythonsebenarnya adalah skrip Python.
  2. Paket IPython diinstal secara terpisah untuk setiap interpreter yang Anda jalankan pip intall.

Jika versi Python yang Anda jalankan memiliki paket IPython yang diinstal, Anda dapat melakukannya

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

Ini akan menjalankan ipythonskrip dengan juru bahasa yang Anda inginkan, bukan yang terdaftar di shebang.

Fisikawan Gila
sumber
Alih-alih memanggil di atas setiap kali, bagaimana cara mengaturnya sebagai default, sehingga setiap kali saya mengetik ipythondi shell saya, secara otomatis membaca interpreter kustom dan bukan default?
Srivatsan
Tambahkan skrip yang melakukan itu ke jalur sebelum default. Tetapi Anda harus mengacaukan lingkungan untuk melakukan itu.
Fisikawan Gila
0

Saya menemukan masalah yang sama tetapi berikut ini adalah satu-satunya solusi yang berhasil untuk saya di OSX 12, Sierra.

ipython selalu meluncurkan untuk python 3.6 tetapi saya membutuhkannya untuk 2.7. Saya tidak dapat menemukan skrip startup ipython untuk 2.7, saya juga tidak dapat menemukan modul IPython untuk dieksekusi python -m. Tidak ada brew instally ipython pip install ipythonatau pip2 install ipythondapat memberikan saya versi 2.7. Jadi saya mendapatkannya secara manual.

brew install ipython@5menginstal versi 2.7 dari sini tetapi tidak akan menaruhnya di Anda $PATHkarena ia tahu nama konflik dengan paket lain. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2akan memperbaikinya dan membiarkan Anda menjalankan ipython2dari prompt shell Anda

Bagi saya, karena saya serius menggunakan ipython untuk 2.7, saya juga menjalankan perintah berikut.

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
sumber
0

Semua jawaban yang disebutkan di sini tidak membantu dalam memecahkan masalah jika Anda menggunakan anaconda atau pembungkus lingkungan virtual lainnya.

Jawaban ini didasarkan pada asumsi bahwa Anda menggunakan anaconda.

Katakanlah Anda berada di lingkungan python 3 dan saat membuat notebook di notebook jupyter itu menunjukkan "Python 2" bukan "Python 3".

Ini karena "ipython" pada dasarnya adalah skrip yang dijalankan dan dalam skrip ini disebutkan versi python mana yang digunakan untuk menjalankan perintah. Yang perlu Anda lakukan adalah mengubah baris ini agar ipython menggunakan versi python yang Anda inginkan.

Pertama hentikan server ipython dan dapatkan lokasi python yang dapat dieksekusi dari lingkungan saat ini menggunakan perintah "which python"

Output saya adalah:

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

Sekarang dapatkan lokasi yang dapat dieksekusi dari ipython menggunakan perintah "yang ipython"

punya saya :

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

Perhatikan bahwa itu menggunakan versi lain dari python yaitu. python dari lingkungan tertentu menjalankan versi berbeda dari python yaitu menjalankan python dari lingkungan yang berbeda.

Sekarang arahkan ke direktori anaconda2 / bin (untuk pengguna anaconda 3 harus anaconda3 / bin) dan cari file "ipython". dalam edit ini baris pertama untuk mengarahkannya ke versi python saat ini yang Anda inginkan. yaitu keluaran dari "which python" yaitu:

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

Perhatikan bahwa saya mengubah lingkungan python saya dari py2 (menjalankan python 2.7) menjadi py3 (menjalankan python 3.5).

Simpan file. Dan jalankan notebook jupyter, sekarang saat membuat notebook baru, opsi "Python 3" akan terlihat.

Bersulang!

100rabh
sumber