ipython读错了python版本

时间:2012-02-21 22:11:33

标签: python ipython

我在使用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。
  4. 我已尝试过其他一些我从其他博客中遇到过的事情。但是他们都没有帮助,也不幸的是我不知道我在做些什么。例如: 我尝试使用easy_install和pip卸载并重新安装ipython。我还尝试通过自制程序重新安装所有内容,并修改路径.bash_profile。

12 个答案:

答案 0 :(得分:136)

好的快速修复:

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

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

#!/usr/local/bin/python

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

答案 1 :(得分:9)

使用virtualenv怎么样? 我很喜欢。也许这不是更快的方式,但我认为非常清楚。

创建virtualenv时,可以使用-p标志指定python路径。

for python 2.7

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

for 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 :(得分:6)

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

which python
python -V

第一个会告诉你路径,第二个会告诉你你正在使用的Python版本。

答案 3 :(得分:2)

我的解决方案很简单,很愚蠢但很有效。

我使用python -V来确定哪个版本

$ python -V
Python 2.7.10

然后在.bash_profile

中创建别名
$ vi ~/.bash_profile

添加一行

alias ipython="python -m IPython"

然后你将在python 2.7中获得ipython

(顺便说一句,我的ipython是通过homebrew安装的,默认情况下会在python 3中运行ipython。)

$ brew install ipython

答案 4 :(得分:1)

使用pyenv

的类似方法
pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

现在它将显示正确版本的python

Python 3.4.5

答案 5 :(得分:1)

非常相关:http://conda.pydata.org/docs/troubleshooting.html#shell-command-location

td;因为shell'哈希问题而遇到问题。和路径变量。

答案 6 :(得分:1)

我能想到的绝对最简单的解决方案,不需要摆弄环境,安装文件或其他任何东西,依赖于事实

  1. 可执行文件ipython实际上是一个Python脚本。
  2. 为您使用。{/ li>运行pip intall的每个解释器单独安装IPython包

    如果你运行的Python版本安装了一个IPython软件包,你可以这样做

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

    这将使用您想要的解释器运行ipython脚本,而不是shebang中列出的解释器。

答案 7 :(得分:1)

将@Matt的评论发布为答案,以便其更加可见

python -m IPython

首先使用路径上可访问的任何python将ipython加载为模块。就我而言,我预装了一个,然后从brew中添加了一个。这只是完美的工作。

答案 8 :(得分:0)

你的问题基本上是让ipython使用正确的python。

所以解决问题的方法是让ipython使用正确的python(它安装了像scipy这样的库)

我在这里写了一个解决方案:

How to make iPython use Python 2 instead of Python 3

答案 9 :(得分:0)

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

ipython总是为python 3.6启动,但我需要2.7。我找不到2.7的ipython启动脚本,也找不到要用python -m执行的IPython模块。 brew instally ipython pip install ipythonpip2 install ipython都无法获得2.7版本。所以我手动拿到了它。

brew install ipython@5安装来自here的2.7版本,但不会将其放在$PATH上,因为它知道名称与另一个包冲突。 ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2会解决这个问题,让您只需从shell提示符

运行ipython2

对我来说,因为我非常认真地使用ipython for 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 :(得分:0)

对我来说,在 Windows 10 上,我的 ipython.exe 与我的 python 不匹配。 我知道这是因为 ipython 说

----> 3 from pywinauto import handleprops
      4 from pywinauto import timings
      5 from pywinauto.application import Application

ModuleNotFoundError: No module named 'pywinauto'

但是,当我使用 > python

执行包含程序时,这有效

这里是不匹配。

ipython 信息

Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.

[DOT DOT DOT]

蟒蛇信息

Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

这是我的解决方法。 我更改了对 Python\...\Scripts 的引用,这是 ipython.exe 的隐藏位置

  1. 我在设置中更改我的系统路径 - 环境变量
  • C:\Users\joeco\AppData\Roaming\Python\Python38\Scripts
  • 现在C:\Users\joeco\AppData\Roaming\Python\Python39\Scripts\
  1. 移动上述值UP到路径的顶部
  2. 重新启动

结果

  1. ipython 现在匹配 python
  2. ipython from pywinauto import handleprops 成功

答案 11 :(得分:0)

我安装了 python2.7、python3.6 和 python3.8

sahil@rubeus:~$ ls -ls /usr/bin/python*
   0 lrwxrwxrwx 1 root root       9 Apr 16  2018 /usr/bin/python -> python2.7
   0 lrwxrwxrwx 1 root root       9 Apr 16  2018 /usr/bin/python2 -> python2.7
3548 -rwxr-xr-x 1 root root 3633000 Feb 27 20:40 /usr/bin/python2.7
   0 lrwxrwxrwx 1 root root       9 Oct 25  2018 /usr/bin/python3 -> python3.6
4424 -rwxr-xr-x 2 root root 4526456 Jan 26 21:03 /usr/bin/python3.6
5016 -rwxr-xr-x 1 root root 5134032 Jun  3 23:23 /usr/bin/python3.8

我在这个位置有 ipython 文件

sahil@rubeus:~$ which ipython
/home/sahil/.local/bin/ipython

它有以下内容

#!/usr/bin/python2

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

所以我只是在同一位置制作了两个名为 ipython3.6 和 ipython3.8 的文件副本,并更新了第一行以指向特定的 Python 版本,/usr/bin/python3.6/usr/bin/python3.8案例。

所以现在有 3 个文件,每个文件都指向特定的 python 版本

sahil@rubeus:~$ ls ~/.local/bin/ipython*
/home/sahil/.local/bin/ipython  
/home/sahil/.local/bin/ipython3.6  
/home/sahil/.local/bin/ipython3.8

现在,当我需要启动 python2 时,我只需从终端运行 ipython 并以同样的方式在 python3.8 中运行 ipython,我运行 ipython3.8

sahil@rubeus:~$ ipython3.8
Python 3.8.11 (default, Jul  3 2021, 17:53:42) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.25.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 

注意:您可能需要使用命令 python3.6 -m pip install IPythonpython3.8 -m pip install IPython 为特定的 Python 版本安装 ipython。不知道是用python安装的还是我单独安装的。