ipythonが間違ったpythonバージョンを読み取る


103

Python、iPython、およびライブラリで問題が発生しています。次の点は、問題の連鎖を示しています。Mac LionでPython 2.7を実行しています。

  1. iPythonはscipyのライブラリであるmatplotlibを読み取りませんが、numpyを読み取ります。
  2. これを修正するために、Pythonのソースコードバージョンをインストールしようとしましたが、2つの異なるバージョン(2.7.1と2.7.2)になっているため、問題はさらに多くなりました。
  3. Pythonを実行し、バージョン2.7.2を使用し、scipy、matplotlib、およびnumpyをインポートしていることに気付きましたが、iPythonではバージョンが2.7.1であり、scipyまたはmatplotlibを開けません。

他のブログ投稿で遭遇したことをいくつか試しました。しかし、それらのどれも助けてくれなかったし、残念ながら私はそれらのいくつかで何をしているのかよくわかりません。たとえば、easy_installとpipを使用してipythonをアンインストールして再インストールしてみました。また、homebrewを使用してすべてを再インストールし、パス.bash_profileを変更してみました。


6
ipythonこのスクリプトは、それが一緒にインストールされた特定のPythonのバージョンに「縛られる」 -それは自動的にあなたが最後にインストールしたものに切り替わりません。最初に2.7.1、次にIPython、次にソースから2.7.2をインストールした場合、IPythonは2.7.1を使用し続けます。すべての失敗を元に戻し、元のPythonバージョンに戻って、ポイント1の背後にある理由を理解する必要があります。または、必要なライブラリにアクセスできるPythonインストールを使用して、IPythonを再インストールします。
ミリムース

もっと具体的に教えてください。ありがとう
Diego-MX

1
どの部分について具体的ですか?IPythonスタートアップのしくみ、または問題を解消する方法は?
ミリムース

1
基本的に、IPythonやeasy_installのようなpythonの「プログラム」をインストールすると、プログラムの起動スクリプトは、インストール時に使用されたpython実行可能ファイルを常に使用するように設定されます。したがって、ライブラリなしのPython 2.7.1があり、IPythonをインストールした場合、IPythonはPython 2.7.1インストールの「中に」インストールされ、ipython実行可能ファイルへのリンクがPATHに配置されます。その後、ソースからPython 2.7.2をインストールすると、それはPythonの新しい個別のコピーであり、IPythonが含まれている既存の2.7.1はアップグレードされません。そのため、IPythonは2.7.2コピー、またはその中のライブラリを認識しません。
ミリムース

1
ライブラリは同じように機能します。ソースからPython 2.7.2をインストールした後に numpyなどインストールした場合、それらは2.7.2ディレクトリにインストールされている可能性があります。つまり、Python 2.7.1バージョンではこれらのライブラリはまったく表示されません。IPythonは2.7.1でインストールされたため、これらのライブラリも表示できませんでした。基本的に、システムには完全に独立したPythonのコピーを必要な数だけインストールできますが、どのコピーが何に使用されているかを追跡するのは困難です。何をしているかわからない場合は、組み込みバージョンのPythonから始めて、不足しているライブラリを再インストールするのが最善です
millimoose

回答:


147

さて、クイックフィックス:

which python

与えますよ/usr/bin/pythonね?行う

which ipython

そして、私はそれがなるでしょう/usr/local/bin/ipython。中を見てみましょう:

編集9/7/16-ファイルは次のようになります。

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

そして、私はこのように適切に動作しますが、私の状況はOPの状況と正確には異なります。


元の回答-2013年9月30日:

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/ipythonエディターで(特権付きで)開き、最初の行を

#!/usr/local/bin/python

保存し、iPythonを起動します。現在使用しているバージョンを使用していると言ってください。


41
疑わしいですが、python -m IPythonと同等ipythonです。必ず正しいPythonを使用してください。
マット

2
ターミナルを閉じて、新しいターミナルを開くことも忘れないでください。PATHは効率のためにシェルによってキャッシュされるためです。これが私がこのソリューションをうまく機能させる方法です。参照:conda.pydata.org/docs/...は
parsethis

@マット。私も体験しました。私の場合は、「python -m IPython」で、必要なバージョンが呼び出されます。しかし、 'ipython'だけで、古いpython2を使用するコピーが開始されました。謎は、「which ipython」を実行すると、pythonファイルのコンテンツが明らかに正しい状態でvirtualenvコピーを指していることです。
kawingkelvin 2018年

15

@Mattのコメントを回答として投稿して、見やすくする

python -m IPython

最初にパス上でアクセス可能なpythonを含むモジュールとしてipythonをロードします。私の場合、1つはプレインストールされ、もう1つはbrewから追加されました。これは完全に機能します。


おそらくこの質問に対する答えではありませんが、これは「任意のpythonバージョンがインストールされた状態でipythonを実行する方法」という質問に対する答えです。ありがとう。
Salyangoz

9

virtualenvの使用についてはどうですか?私は本当にそれが好き。多分それはより速い方法ではありませんが、私はそれは非常に明確だと思います。

virtualenvを作成するときに、-pフラグを使用してpythonパスを指定できます。

Python 2.7用

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

Python 3.4の場合

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

2
これは古いスレッドですが、virtualenvにも出会い、製品の開発に適しています。ただし、「毎日」の分析を目的として、システムにpython / ipythonのストレートバージョンを使用できるようにしたいと考えています。
Diego-MX

1
python -m IPython指定されたバージョンのipythonを開始しますpython
Xiao

1
ノートpython -m IPythonこれはインストールが必要ですpip install ipython

6

まず、適切なpythonを使用していることを確認します。コマンドプロンプトで次のように入力します。

which python
python -V

1つ目はパスを示し、2つ目は使用しているPythonのバージョンを示します。


わかりましたので、/ usr / local / bin / python上のPython 2.7.2
Diego-MX

4

私の解決策はシンプルで愚かですが機能します。

私はpython -Vバージョンを確認するために使用します

$ python -V
Python 2.7.10

そして.bash_profileにエイリアスを作成します

$ vi ~/.bash_profile

行を追加

alias ipython="python -m IPython"

次にipython、Python 2.7 を取得します。🙂

(ちなみに、私ipythonはを介してインストールしhomebrewます。デフォルトでは、Python 3でipythonが実行されます。)

$ brew install ipython

2

非常に関連性が高い: http //conda.pydata.org/docs/troubleshooting.html#shell-command-location

td; lr問題は、シェルの「ハッシュ」とパス変数が原因で発生します。


また、virtualenvにipythonをインストールすることも一般的な良い習慣です。which pythonvirtualenv pythonバイナリを指す必要があります。
parsethis 2017年

virtualenv内にipythonをインストールした後でも、シェルハッシュが私を傷つけました。hash -r私のために修正しました。ありがとう!
theY4Kman 2018

1

pyenvを使用した同様の方法

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

これで、Pythonの正しいバージョンが表示されます

Python 3.4.5

1

私が考えることができる絶対的に簡単な解決策は、環境、インストールされたファイルなどをいじる必要がないという事実に依存しています

  1. 実行可能ファイルipythonは実際にはPythonスクリプトです。
  2. IPythonパッケージは、実行したインタープリターごとに個別にインストールされますpip intall

実行しているPythonのバージョンにIPythonパッケージがインストールされている場合は、次のようにすることができます

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

これはipython、シバンにリストされているものではなく、必要なインタープリターを使用してスクリプトを実行します。


毎回上記を呼び出すのではなく、デフォルトとしてどのように設定するipythonのですか?シェルに入力するたびに、デフォルトではなくカスタムインタープリターを自動的に読み取りますか?
Srivatsan 2017

それを行うスクリプトを、デフォルトの前のパスに追加します。しかし、それを行うには環境に手を加える必要があります。
Mad Physicist


0

私は同じ問題に遭遇しましたが、OSX 12、Sierraで私のために機能した唯一の解決策は次のとおりです。

ipythonは常にpython 3.6で起動していましたが、2.7ではそれが必要でした。2.7用のipython起動スクリプトも見つからず、で実行するIPythonモジュールも見つかりませんでしたpython -m。2.7バージョンを入手できない、brew instally ipython pip install ipythonまたはpip2 install ipython入手できなかった。だから私はそれを手動で手に入れました。

brew install ipython@5ここから2.7バージョンをインストールします$PATHが、名前が別のパッケージと競合していることを認識しているため、インストールしません。 ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2これを修正し、ただ実行させますipython2し、シェルプロンプトからできるようにします

私は2.7でipythonを使うことに真剣だったので、次のコマンドも実行しました。

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

ここに記載されているすべての回答は、anacondaまたは他の仮想環境ラッパーを使用している場合の問題の解決には役立ちません。

この回答は、アナコンダを使用しているという前提に基づいています。

あなたがPython 3環境にいて、jupyter Notebookでノートブックを作成すると、「Python 3」ではなく「Python 2」が表示されるとしましょう。

これは、「ipython」は基本的に実行されるスクリプトであり、このスクリプトでは、コマンドの実行に使用しているpythonのバージョンについて言及しているためです。必要なのは、ipythonが必要なバージョンのpythonを使用するようにこの行を変更することだけです。

最初にipythonサーバーを停止し、「which python」コマンドを使用して現在の環境のpython実行可能ファイルの場所を取得します

私の出力は:

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

ここで、コマンド「which ipython」を使用して、ipythonの実行可能な場所を取得します。

私のです:

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

Pythonの別のバージョンを使用していることに注意してください。異なるバージョンのpythonを実行している特定の環境からのpython、つまり、異なる環境からpythonを実行している。

次に、anaconda2 / binディレクトリに移動し(anaconda 3ユーザーの場合は、anaconda3 / binにする必要があります)、「ipython」ファイルを検索します。この場合、最初の行を編集して、目的の現在のPythonバージョンを指すようにします。つまり、「which python」の出力、つまり:

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

python環境をpy2(python 2.7を実行)からpy3(python 3.5を実行)に変更したことに注意してください。

ファイルを保存します。そしてjupyter Notebookを実行すると、新しいNotebookを作成するときに「Python 3」オプションが表示されます。

乾杯!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.