ipython yanlış python sürümünü okuyor


103

Python, iPython ve kitaplıklarla ilgili sorunlar yaşıyorum. Aşağıdaki noktalar problematiklerin zincirini göstermektedir. Mac Lion'da Python 2.7 çalıştırıyorum.

  1. iPython scipy, matplotlib kitaplıklarını okumaz, ancak numpy okur.
  2. Bunu düzeltmek için, Python'un kaynak kodu sürümünü kurmayı denedim ve bu bana yalnızca iki farklı sürümüm olduğundan daha fazla sorun çıkardı: 2.7.1 ve 2.7.2
  3. Python çalıştırmanın, 2.7.2 sürümünü kullandığını ve scipy, matplotlib ve numpy'yi içe aktardığını fark ettim, ancak iPython'da sürüm, scipy veya matplotlib'i açmayan 2.7.1'dir.

Diğer blog gönderilerinde karşılaştığım birkaç şeyi denedim. Ama hiçbiri yardımcı olmadı ve maalesef bazılarıyla ne yaptığımı tam olarak bilmiyorum. Örneğin: ipython'u easy_install ve pip ile kaldırıp yeniden yüklemeyi denedim. Ayrıca her şeyi homebrew aracılığıyla yeniden yüklemeyi ve .bash_profile yolunu değiştirmeyi denedim.


6
ipythonSenaryo onunla yüklenen belirli Python sürümüne "bağlı" olduğu - otomatik son yüklenen ne geçmeyecektir. Önce 2.7.1, ardından IPython, ardından 2.7.2'yi kaynaktan yüklediyseniz, IPython'unuz 2.7.1 kullanmaya devam edecektir. Ya tüm sallanmanızı geri almanız, orijinal Python sürümünüze geri dönmeniz ve 1. noktanın arkasındaki nedenin ne olduğunu bulmanız gerekir; alternatif olarak, ihtiyacınız olan kitaplıklara erişebilen Python kurulumunu kullanarak IPython'u yeniden yükleyin.
millimoose

? Daha net ... teşekkürler Olabilir
Diego-MX

1
Hangi bölüme özel? IPython başlangıcı nasıl çalışır veya problem nasıl ortadan kaldırılır?
millimoose

1
Esasen, IPython veya hatta easy_install gibi herhangi bir python "programını" kurduğunuzda, programın başlangıç ​​betiği, her zaman yüklendiği python çalıştırılabilir dosyasını kullanacak şekilde ayarlanır. Dolayısıyla, kitaplıklarınız olmadan Python 2.7.1'e sahipseniz ve ardından IPython'u kurduysanız, IPython, Python 2.7.1 kurulumuna "yüklenir" ve ipythonyürütülebilir dosyaya bir bağlantı PATH'nize yerleştirilir. Daha sonra Python 2.7.2'yi kaynaktan yüklerseniz, Python'un yeni, ayrı bir kopyası, içinde IPython bulunan mevcut 2.7.1'i yükseltmez. Dolayısıyla IPython, 2.7.2 kopyasını veya içindeki herhangi bir kitaplığı görmez.
millimoose

1
Kütüphaneler de aynı şekilde çalışır. Python 2.7.2'yi kaynaktan yükledikten sonra numpy vb. Yüklediyseniz , muhtemelen 2.7.2 dizinine yüklenmişlerdir. Bu, Python 2.7.1 sürümünün bu kitaplıkları hiç görmeyeceği anlamına gelir. IPython 2.7.1 ile kurulduğundan, bu kitaplıkları da göremedi. Temel olarak, sisteminizde istediğiniz kadar tamamen ayrı Python kopyasına sahip olabilirsiniz, ancak hangisinin ne için kullanıldığını takip etmek zor olabilir. Ne yaptığınızı bilmiyorsanız, Python'un yerleşik sürümüyle başlamak ve eksik kitaplıkları yeniden yüklemek
iyisidir

Yanıtlar:


148

Tamam hızlı çözüm:

which python

verir /usr/bin/python, değil mi? Yapmak

which ipython

ve eminim öyle olacak /usr/local/bin/ipython. İçeri bakalım:

9/7/16 düzenleyin - Dosya artık şöyle görünür:

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

Benimki bu şekilde düzgün çalışıyor, ama benim durumum tam olarak OP'ninki gibi değil.


Orijinal cevap - 30.09.2013:

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 - /usr/local/bin/ipythoneditörünüzde açın (ayrıcalıklarla) ve ilk satırı şu şekilde değiştirin:

#!/usr/local/bin/python

kaydet, iPython'u başlatın, şimdi istediğiniz sürümü kullandığını söylemelisiniz.


41
şüpheniz varsa, doğru Python'u kullandığınızdan emin python -m IPythonolduğunuza eşdeğerdir ipython.
Matt

2
ayrıca terminali kapatmayı ve yenisini açmayı da unutmayın. PATH, verimlilik için kabuk tarafından önbelleğe alındığından. bu çözümü benim için nasıl çalıştırdığım. bakınız: conda.pydata.org/docs/…
parsethis

@Mat. Ben de deneyimledim. Benim durumum "python -m IPython" istediğim doğru sürümü çağıracak. Ama sadece 'ipython', eski python2 kullanan bir kopya başlattı. Gizem, eğer bir "hangi ipython" yaparsam, bu python dosyası içeriğinin görünüşte doğru olduğu virtualenv kopyasına işaret ediyor olmasıdır.
kawingkelvin

15

@ Matt'in yorumunu, daha görünür olması için yanıt olarak yayınlamak

python -m IPython

İlk önce yolda erişilebilen python ile ipython'u bir modül olarak yükler. Benim durumumda önceden kurulmuş bir tane vardı ve bir tane de demden ekledim. Bu mükemmel çalışıyor.


Belki bu sorunun cevabı değil ama şu sorunun cevabı bu: "Herhangi bir python sürümü kurulu iken ipython nasıl çalıştırılır". Teşekkürler.
Salyangoz

9

Virtualenv kullanmaya ne dersiniz? Gerçekten beğendim. Belki daha hızlı yol değildir ama bence çok açık.

Bir virtualenv oluşturduğunuzda, python yolunu -p bayrağıyla belirtebilirsiniz.

python 2.7 için

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

python 3.4 için

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

2
Bu eski bir iş parçacığı, ancak ben de sanal dünyalarla karşılaştım ve ürünleri geliştirmek için hoşuma gitti. Bununla birlikte, "günlük" analiz amacıyla, sistemimde doğrudan kullanılabilir bir python / ipython sürümüne sahip olmayı tercih ederim.
Diego-MX

1
python -m IPythonipython'upython
Xiao

1
python -m IPythonbunun yüklü olması gerektiğini unutmayın :pip install ipython
Xiao

6

İlk olarak, doğru pitonu kullandığınızdan emin olurum. Bir komut isteminde şunu yazın:

which python
python -V

İlki size yolu söyleyecektir, ikincisi size kullandığınız Python sürümünü söyler.


Tamam, bana / usr / local / bin / python üzerinde Python 2.7.2 veriyor
Diego-MX

4

Çözümüm basit, aptalca ama işe yarıyor.

Kullandığım python -Vemin versiyonu ne yapmak

$ python -V
Python 2.7.10

ve sonra .bash_profile içinde takma ad oluşturun

$ vi ~/.bash_profile

Bir satır ekleyin

alias ipython="python -m IPython"

o zaman ipythonpython 2.7'de bir alacaksınız . 🙂

(Bu arada, my ipythonis install via homebrew, varsayılan olarak python 3'te çalışan bir ipython alacak.)

$ brew install ipython


1

Pyenv kullanan benzer bir yöntem

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Şimdi python'un doğru sürümünü gösterecek

Python 3.4.5

1

Aklıma gelen, ortamlarla, yüklü dosyalarla veya başka herhangi bir şeyle uğraşmayı gerektirmeyen mutlak en basit çözüm, şu gerçeklere dayanıyor:

  1. Yürütülebilir dosya ipythonaslında bir Python betiğidir.
  2. IPython paketi, pip intallbirlikte çalıştırdığınız her yorumlayıcı için ayrı olarak kurulur .

Birlikte çalıştırdığınız Python sürümünde bir IPython paketi kuruluysa, şunları yapabilirsiniz:

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

Bu, ipythonbetiği shebang'da listelenen yorumlayıcı yerine istediğiniz yorumlayıcıyla çalıştıracaktır .


Yukarıdakileri her seferinde çağırmak yerine, onu varsayılan olarak nasıl ayarlayabilirim, böylece kabuğuma her yazdığımda ipython, varsayılan yerine özel yorumlayıcıyı otomatik olarak okur?
Srivatsan

Varsayılandan önceki yola bunu yapan bir komut dosyası ekleyin. Ancak bunu yapmak için çevreyi karıştırmanız gerekir.
Mad Fizikçi


0

Aynı sorunla karşılaştım ancak OSX 12, Sierra'da benim için çalışan tek çözüm şuydu.

ipython her zaman python 3.6 için başlatılıyordu ama ben 2.7 için buna ihtiyacım vardı. 2.7 için bir ipython başlangıç ​​betiği bulamadım veya çalıştırılacak IPython modülünü bulamadım python -m. Hiçbiri brew instally ipython pip install ipythonya pip2 install ipythonbana 2.7 sürümü alabilir. Bu yüzden manuel olarak aldım.

brew install ipython@52.7 sürümünü buradan yükler, ancak $PATHadın başka bir paketle çakıştığını bildiği için sizin üzerine koymaz. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2bunu düzeltecek ve sadece ipython2kabuk isteminizden koşmanıza izin verecek

Benim için, 2.7 için ipython kullanma konusunda ciddi olduğum için aşağıdaki komutları da çalıştırdım.

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

Burada bahsedilen tüm cevaplar, anaconda veya başka bir sanal ortam sarıcı kullanıyorsanız, sorunu çözmede yardımcı olmaz.

Bu cevap, anaconda kullandığınız varsayımına dayanmaktadır.

Bir python 3 ortamında olduğunuzu ve jupyter not defterinde bir not defteri oluştururken "Python 3" yerine "Python 2" gösterdiğini varsayalım.

Bunun nedeni, "ipython" un esasen çalıştırılan bir betik olmasıdır ve bu betikte, komutu yürütmek için hangi python sürümünü kullandığını belirtir. Yapmanız gereken tek şey, ipython'un istediğiniz python sürümünü kullanması için bu satırı değiştirmek.

Önce ipython sunucusunu durdurun ve "hangi python" komutunu kullanarak mevcut ortamın çalıştırılabilir python dosyasının konumunu alın

Çıktım:

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

Şimdi ipython'un çalıştırılabilir konumunu alın "hangi ipython" komutunu kullanın

benimki :

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

Farklı bir python ie sürümü kullandığına dikkat edin. farklı bir python sürümünü çalıştıran belirli bir ortamdaki python, yani farklı bir ortamdan python çalıştıran.

Şimdi anaconda2 / bin dizinine gidin (anaconda 3 kullanıcıları için anaconda3 / bin olmalıdır) ve "ipython" dosyasını arayın. bu düzenlemede ilk satırı istediğiniz geçerli python sürümüne yönlendirecek şekilde düzenleyin. yani "hangi pitonun" çıktısı yani:

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

Python ortamımı py2'den (python 2.7 çalıştıran) py3'e (python 3.5 çalıştıran) değiştirdiğime dikkat edin.

Dosya 'yı kaydet. Ve jupyter not defterini çalıştırın, şimdi yeni bir not defteri oluştururken "Python 3" seçeneği görünür olmalıdır.

Şerefe!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.