问题:ipython读取错误的python版本
我在使用Python,iPython和库时遇到了麻烦。以下几点显示了问题的链。我在Mac Lion上运行Python 2.7。
- iPython不会读取scipy和matplotlib的库,但会读取numpy。
- 为了解决这个问题,我尝试安装Python的源代码版本,这给我带来了更多问题,因为现在我有两个不同的版本:2.7.1和2.7.2
- 我注意到运行Python,使用版本2.7.2,并且确实导入scipy,matplotlib和numpy,但是在iPython上,该版本是2.7.1,无法打开scipy或matplotlib。
我尝试了其他博客文章中遇到的几件事。但是他们都没有帮助,而且不幸的是,我还不太了解我对其中的一些人正在做什么。例如:我尝试使用easy_install和pip卸载并重新安装ipython。我还尝试通过自制程序重新安装所有内容,并修改路径.bash_profile。
回答 0
好的快速修复:
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,应该说它正在使用您现在想要的版本。
回答 1
发表@Matt的评论作为答案,这样它才更明显
python -m IPython
首先使用路径上可访问的任何python将ipython加载为模块。就我而言,我预装了一个,然后从brew中添加了一个。这只是完美的工作。
回答 2
怎么样使用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
回答 3
首先,我将确保您使用的是正确的python。在命令提示符下键入:
which python
python -V
第一个告诉您路径,第二个告诉您所使用的Python版本。
回答 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
回答 5
极为相关:http : //conda.pydata.org/docs/troubleshooting.html#shell-command-location。
td; lr问题是由于shell的“散列”和路径变量而引起的。
回答 6
使用pyenv的类似方法
pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython
现在它将显示正确版本的python
Python 3.4.5
回答 7
我能想到的绝对最简单的解决方案,即无需摆弄环境,安装的文件或其他任何东西,它依赖于以下事实:
- 该可执行文件
ipython
实际上是一个Python脚本。 - IPython包是与您使用的每个解释器分开安装的
pip intall
。
如果您运行的Python版本安装了IPython软件包,则可以
/path/to/desired/python $(which ipython)
这将ipython
使用所需的解释器而不是shebang中列出的解释器来运行脚本。
回答 8
您的问题基本上是使ipython使用正确的python。
因此,解决此问题的方法是使ipython使用正确的python(已安装scipy之类的库)
我在这里写了一个解决方案:
回答 9
我遇到了同样的问题,但以下是在OSX 12 Sierra上对我有效的唯一解决方案。
ipython始终为python 3.6启动,但我需要2.7。我找不到2.7的ipython启动脚本,也找不到与一起执行的IPython模块python -m
。没有一个brew instally ipython
pip install ipython
或pip2 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
回答 10
如果您使用的是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”选项应该可见。
干杯!