ipython读取错误的python版本


103

我在使用Python,iPython和库时遇到了麻烦。以下几点显示了问题的链。我在Mac Lion上运行Python 2.7。

  1. iPython不会读取scipy和matplotlib的库,但会读取numpy。
  2. 为了解决这个问题,我尝试安装Python的源代码版本,这给我带来了更多问题,因为现在我有两个不同的版本:2.7.1和2.7.2
  3. 我注意到运行Python,使用版本2.7.2,并且确实导入scipy,matplotlib和numpy,但是在iPython上,该版本是2.7.1,无法打开scipy或matplotlib。

我尝试了其他博客文章中遇到的几件事。但是他们都没有帮助,而且不幸的是,我还不太了解我对其中的一些人正在做什么。例如:我尝试使用easy_install和pip卸载并重新安装ipython。我还尝试通过自制程序重新安装所有内容,并修改路径.bash_profile。


6
ipython脚本会“绑定”到其安装时使用的特定Python版本–它不会自动切换到上次安装的版本。如果首先安装了2.7.1,然后安装了IPython,然后从源代码安装了2.7.2,则您的IPython将继续使用2.7.1。您需要撤消所有的麻烦,回到原来的Python版本,找出导致第1点落后的原因;或者,使用任何可以访问您需要的库的Python重新安装IPython。
millimoose 2012年

您能具体一点吗?...谢谢
Diego-MX

1
具体关于哪一部分?IPython启动如何工作,或如何解决问题?
millimoose 2012年

1
本质上,当您安装任何Python“程序”(例如IPython甚至easy_install)时,该程序的启动脚本都将设置为始终使用安装时所使用的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副本或其中的任何库。
millimoose 2012年

1
图书馆的工作原理是一样的。如果从源代码安装Python 2.7.2 之后安装了numpy等,则它们很可能已安装到2.7.2目录中。这意味着Python 2.7.1版本根本看不到那些库。由于IPython随2.7.1一起安装,因此也看不到那些库。基本上,您可以在系统上拥有任意数量的完全独立的Python副本,但是很难跟踪使用哪个Python副本。除非您知道自己在做什么,否则最好从内置版本的Python开始,然后重新安装缺少的库
millimoose 2012年

Answers:


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并不完全一样。


原始答案-9/30/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')()
    )

啊哈- /usr/local/bin/ipython在您的编辑器中打开(具有特权),并将第一行更改为

#!/usr/local/bin/python

保存,启动iPython,应该说它正在使用您现在想要的版本。


41
毫无疑问,python -m IPython它等同于ipython,期望您一定会使用正确的Python。
马特

2
还记得关闭终端并打开一个新终端。因为PATH由shell缓存以提高效率。这就是我如何获得此解决方案的方法。见:conda.pydata.org/docs/...
parsethis

@马特 我也经历过。我的情况是“ python -m IPython”将调用我想要的正确版本。但是只是'ipython',它启动了一个使用旧python2的副本。神秘的是,如果我做一个“哪个ipython”,它指向的virtualenv副本与该python文件的内容显然是正确的。
kawingkelvin

15

发表@Matt的评论作为答案,这样它才更明显

python -m IPython

首先使用路径上可访问的任何python将ipython加载为模块。就我而言,我预装了一个,然后从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
这是一个旧线程,但是我也遇到过virtualenvs,并且喜欢它们对开发产品非常有用。但是,出于“日常”分析的目的,我宁愿在系统中使用可直接使用的python / ipython版本。
Diego-MX

1
python -m IPython将启动IPython的与给定的版本python

1
请注意python -m IPython需要安装此软件:pip install ipython

6

首先,我将确保您使用的是正确的python。在命令提示符下键入:

which python
python -V

第一个告诉您路径,第二个告诉您所使用的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


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使用所需的解释器而不是shebang中列出的解释器来运行脚本。


而不是每次都调用上述方法,而是如何将其设置为默认值,以便每次我ipython在shell中键入时,它都会自动读取自定义解释器而不是默认值?
Srivatsan

将执行此操作的脚本添加到默认路径之前的路径。但是您必须搞砸环境才能做到这一点。
疯狂物理学家


0

我遇到了同样的问题,但以下是在OSX 12 Sierra上对我有效的唯一解决方案。

ipython始终为python 3.6启动,但我需要2.7。我找不到2.7的ipython启动脚本,也找不到与一起执行的IPython模块python -m。没有一个brew instally ipython pip install ipythonpip2 install ipython可以让我获得2.7版本的功能。所以我手动得到了。

brew install ipython@5此处安装2.7版本,但不会安装在您的2.7版本上,$PATH因为它知道名称与另一个软件包冲突。 ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2将解决此问题,让您仅ipython2在shell提示符下运行

对我来说,因为我认真考虑将python用于2.7,所以我还运行了以下命令。

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或其他虚拟环境包装器,则此处提到的所有答案都无助于解决问题。

该答案基于您正在使用anaconda的假设。

假设您处于python 3环境中,并且在jupyter笔记本上创建笔记本时,它将显示“ Python 2”而不是“ Python 3”。

这是因为“ ipython”本质上是一个正在运行的脚本,并且在此脚本中提到了用于执行命令的python版本。您需要做的就是更改此行,以便ipython使用所需的python版本。

首先停止ipython服务器,并使用命令“哪个python”获取当前环境的python可执行文件的位置。

我的输出是:

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

现在使用命令“哪个ipython”获取ipython的可执行位置。

我的是 :

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

请注意,它使用的是不同版本的python即。来自运行不同版本python的特定环境的python,即运行来自不同环境的python。

现在,导航到目录anaconda2 / bin(对于anaconda 3用户,应为anaconda3 / bin)并搜索“ ipython”文件。在此编辑中,将第一行指向您想要的当前python版本。即“哪个python”的输出,即:

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

请注意,我将python环境从py2(运行python 2.7)更改为py3(运行python 3.5)。

保存文件。并运行jupyter notebook,现在在创建新笔记本时,“ Python 3”选项应该可见。

干杯!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.