簡體   English   中英

ipython 讀取錯誤的 python 版本

[英]ipython reads wrong python version

我在使用 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。

好的快速修復:

which python

給你/usr/bin/python ,對嗎?

which ipython

我打賭那將是/usr/local/bin/ipython 我們來看看里面:

編輯 2016 年 9 月 7 日——文件現在看起來像這樣:

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,應該說它正在使用您現在想要的版本。

發布@Matt 的評論作為答案只是為了讓它更明顯

python -m IPython

將 ipython 作為一個模塊加載,首先在路徑上可以訪問任何 python。 就我而言,我預先安裝了一個,另一個是從 brew 中添加的。 這只是完美的作品。

使用 virtualenv 怎么樣? 我很喜歡。 也許這不是更快的方式,但我認為這很清楚。

創建 virtualenv 時,可以使用 -p 標志指定 python 路徑。

對於蟒蛇 2.7

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

用於蟒蛇 3.4

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

首先,我會確保您使用的是正確的python。 在命令提示符下鍵入:

which python
python -V

第一個會告訴您路徑,第二個會告訴您正在使用的 Python 版本。

我的解決方案很簡單,愚蠢但有效。

我使用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

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

由於 shell '散列' 和路徑變量,會遇到 td;lr 問題。

使用pyenv的類似方法

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

現在它將顯示正確版本的python

Python 3.4.5

我能想到的最簡單的解決方案,不需要擺弄環境、安裝的文件或其他任何東西,它依賴於以下事實:

  1. 可執行文件ipython實際上是一個 Python 腳本。
  2. IPython 包是為您運行pip intall每個解釋器單獨pip intall的。

如果你運行的 Python 版本安裝了 IPython 包,你可以這樣做

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

這將使用您想要的解釋器而不是shebang 中列出的解釋器運行ipython腳本。

你的問題基本上是讓 ipython 使用正確的 python。

所以解決問題的方法是讓 ipython 使用正確的 python(安裝了像 scipy 這樣的庫)

我在這里寫了一個解決方案:

如何讓 iPython 使用 Python 2 而不是 Python 3

我遇到了同樣的問題,但以下是在 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這里安裝 2.7 版本,但不會把它放在你的$PATH因為它知道名稱與另一個包沖突。 ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2將解決這個問題,讓您只需從 shell 提示符運行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

如果您使用的是 anaconda 或其他一些虛擬環境包裝器,則此處提到的所有答案都無助於解決問題。

此答案基於您使用 anaconda 的假設。

假設您在 python 3 環境中,當在 jupyter notebook 上創建筆記本時,它顯示“Python 2”而不是“Python 3”。

這是因為“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(running python 2.7) 更改為 py3(running python 3.5)。

保存文件。 並運行 jupyter notebook,現在在創建新筆記本時,“Python 3”選項應該可見。

干杯!

對我來說,在 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執行包含程序時,這有效

這是不匹配。

蟒蛇信息

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成功

我安裝了 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 版本python3.6 -m pip install IPython python3.8 -m pip install IPython 我不確定它是用python安裝的還是我單獨安裝的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM