ipython lê a versão python errada


103

Tenho tido problemas com Python, iPython e as bibliotecas. Os pontos a seguir mostram a cadeia da problemática. Estou executando o Python 2.7 no Mac Lion.

  1. iPython não lê as bibliotecas do scipy, matplotlib, mas lê numpy.
  2. Para corrigir isso, tentei instalar a versão do código-fonte do Python, e só me deu mais problemas, pois agora tenho duas versões diferentes: 2.7.1 e 2.7.2
  3. Percebi que executando Python, usa a versão 2.7.2 e importa scipy, matplotlib e numpy, mas no iPython a versão é 2.7.1 que não abre scipy ou matplotlib.

Tentei várias coisas que encontrei em outros posts de blog. Mas nenhum deles ajudou e também, infelizmente, não sei bem o que estou fazendo com alguns deles. Por exemplo: tentei desinstalar e reinstalar o ipython com easy_install e pip. Também tentei reinstalar tudo por meio do homebrew e modificar o caminho .bash_profile.


6
O ipythonscript está "vinculado" à versão específica do Python com a qual foi instalado - ele não mudará automaticamente para a última instalação. Se você instalou primeiro o 2.7.1, depois o IPython e depois o 2.7.2 da fonte, seu IPython continuará usando o 2.7.1. Você precisa desfazer todas as suas manobras, voltar para a versão original do Python e descobrir o motivo do ponto 1; como alternativa, reinstale o IPython usando qualquer instalação do Python que possa acessar as bibliotecas de que você precisa.
milimoose de

Você poderia ser mais específico? ... obrigado
Diego-MX

1
Específico sobre qual parte? Como funciona a inicialização do IPython ou como resolver o problema?
millimoose de

1
Essencialmente, quando você instala qualquer "programa" python, como IPython ou mesmo easy_install, o script de inicialização do programa é configurado para usar sempre o executável python com o qual foi instalado. Portanto, se você tiver o Python 2.7.1 sem suas bibliotecas e, em seguida, instalar o IPython, o IPython será instalado "na" instalação do Python 2.7.1 e um link para o ipythonexecutável será colocado em seu PATH. Se você instalar o Python 2.7.2 a partir do código-fonte, é uma nova cópia separada do Python e não atualizará o 2.7.1 existente que contém o IPython. Portanto, o IPython não verá a cópia 2.7.2 ou nenhuma biblioteca nela.
millimoose

1
As bibliotecas funcionam da mesma forma. Se você instalou o numpy etc. após instalar o Python 2.7.2 da fonte, eles provavelmente foram instalados no diretório 2.7.2. Isso significa que a versão Python 2.7.1 não veria essas bibliotecas. Como o IPython foi instalado com 2.7.1, ele também não conseguiu ver essas bibliotecas. Basicamente, você pode ter quantas cópias completamente separadas do Python em seu sistema desejar, mas pode ser difícil manter o controle de qual delas é usada para quê. A menos que você saiba o que está fazendo, é melhor começar com a versão integrada do Python e apenas reinstalar as bibliotecas ausentes
millimoose

Respostas:


147

Ok, solução rápida:

which python

dá pra você /usr/bin/pythonné? Faz

which ipython

e aposto que sim /usr/local/bin/ipython. Vamos dar uma olhada dentro:

Editar 07/09/16 - O arquivo agora se parece com este:

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

E o meu funciona bem assim, mas minha situação não é exatamente como a do OP.


Resposta original - 30/09/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')()
    )

Aha - abra /usr/local/bin/ipythonem seu editor (com privilégios) e mude a primeira linha para

#!/usr/local/bin/python

salvar, iniciar iPython, deve dizer que está usando a versão que você deseja agora.


41
em caso de dúvida, python -m IPythoné equivalente a ipython, esperamos que você tenha certeza de usar o Python certo.
Matt

2
lembre-se também de fechar o terminal e abrir um novo. uma vez que o PATH é armazenado em cache pelo shell para maior eficiência. foi assim que fiz essa solução funcionar para mim. consulte: conda.pydata.org/docs/…
parsethis

@Matt. Eu também experimentei. Meu caso é "python -m IPython" invocará a versão correta que eu queria. Mas apenas 'ipython', ele iniciou uma cópia que usa o antigo python2. O mistério é se eu fizer um "which ipython", ele está apontando para uma cópia virtualenv com o conteúdo do arquivo python aparentemente correto.
kawingkelvin

15

Postando o comentário de @Matt como uma resposta apenas para ficar mais visível

python -m IPython

Carrega ipython como um módulo com qualquer python que esteja acessível no caminho primeiro. No meu caso, eu tinha um pré-instalado e um adicionado do brew. Isso funciona perfeitamente.


Talvez não seja a resposta para esta pergunta, mas esta é a resposta para a pergunta: "como executar o ipython com qualquer versão do python instalada". Obrigado.
Salyangoz de

9

Que tal usar um virtualenv? Eu realmente gosto. Talvez não seja o caminho mais rápido, mas acho que é muito claro.

Ao criar um virtualenv, você pode especificar o caminho python com o sinalizador -p.

para python 2.7

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

para 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
Este é um tópico antigo, mas também descobri o virtualenvs e gosto deles para desenvolver produtos. Para fins de análise "cotidiana", no entanto, prefiro apenas ter uma versão utilizável de python / ipython em meu sistema.
Diego-MX

1
python -m IPythoniniciará o ipython com a versão fornecida depython
Xiao

1
note que python -m IPythonprecisa disso instalado:pip install ipython
Xiao

6

Primeiro, gostaria de ter certeza de que você está usando o python certo. Em um prompt de comando, digite:

which python
python -V

O primeiro informará o caminho, o segundo informará a versão do Python que você está usando.


Ok, isso me dá o Python 2.7.2 em / usr / local / bin / python
Diego-MX

4

Minha solução é simples, estúpida, mas funciona.

Eu uso python -Vpara ter certeza de qual versão é

$ python -V
Python 2.7.10

e criar um alias em .bash_profile

$ vi ~/.bash_profile

Adicionar uma linha

alias ipython="python -m IPython"

então você obterá um ipythonno python 2.7. 🙂

(A propósito, meu ipythoné instalar via homebrew, o padrão terá um ipython executado em python 3.)

$ brew install ipython

2

extremamente relevante: http://conda.pydata.org/docs/trou troubleshooting.html#shell - command - location .

Problemas td; lr são encontrados devido ao 'hashing' do shell e às variáveis ​​de caminho.


também uma boa prática geral é instalar o ipython no virtualenv. você which pythondeve apontar para o binário virtualenv python.
parsethis

O hashing do shell me mordeu, mesmo depois de instalar o ipython dentro do virtualenv. hash -rconsertou para mim; obrigado!
theY4Kman

1

Um método semelhante usando pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Agora ele irá mostrar a versão correta do python

Python 3.4.5

1

A solução mais simples absoluta que eu poderia pensar, que não requer mexer com ambientes, arquivos instalados ou qualquer outra coisa, depende dos fatos que

  1. O executável ipythoné na verdade um script Python.
  2. O pacote IPython é instalado separadamente para cada interpretador com o qual você executou pip intall.

Se a versão do Python que você está executando tem um pacote IPython instalado, você pode simplesmente fazer

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

Isso executará o ipythonscript com o intérprete que você deseja, em vez de um listado no shebang.


Em vez de chamar o código acima todas as vezes, como faço para defini-lo como padrão, de modo que toda vez que eu digitar ipythonno meu shell, ele leia automaticamente o interpretador personalizado em vez do padrão?
Srivatsan,

Adicione um script que faça isso ao caminho antes do padrão. Mas você tem que mexer com o meio ambiente para fazer isso.
Mad Physicist


0

Eu me deparei com o mesmo problema, mas a seguinte foi a única solução que funcionou para mim no OSX 12, Sierra.

O ipython sempre foi lançado para o python 3.6, mas eu precisava dele para o 2.7. Não consegui encontrar um script de inicialização do ipython para 2.7, nem o módulo IPython para executar python -m. Nada brew instally ipython pip install ipythonou pip2 install ipythonpoderia me dar a versão 2.7. Então eu peguei manualmente.

brew install ipython@5instala a versão 2.7 a partir daqui, mas não a coloca no seu $PATHporque sabe que o nome está em conflito com outro pacote. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2irá consertar isso e permitir que você execute apenas a ipython2partir do prompt do shell

Para mim, como estava falando sério sobre usar ipython para 2.7, também executei os seguintes comandos.

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

Todas as respostas mencionadas aqui não ajudam a resolver o problema se você estiver usando o anaconda ou algum outro wrapper de ambiente virtual.

Esta resposta é baseada na suposição de que você está usando o anaconda.

Digamos que você esteja em um ambiente python 3 e ao criar um notebook no notebook jupyter ele mostre "Python 2" em vez de "Python 3".

Isso ocorre porque "ipython" é essencialmente um script que é executado e neste script ele menciona qual versão do python está usando para executar o comando. Tudo o que você precisa fazer é alterar esta linha para que o ipython use a versão do python que você deseja.

Primeiro pare o servidor ipython e obtenha a localização do executável python do ambiente atual usando o comando "which python"

Minha saída é:

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

Agora pegue a localização do executável do ipython, use o comando "which ipython"

o meu é :

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

Observe que ele está usando uma versão diferente do python ie. python de um ambiente específico executando uma versão diferente de python, ou seja, executando python de um ambiente diferente.

Agora navegue até o diretório anaconda2 / bin (para usuários do anaconda 3 deve ser anaconda3 / bin) e procure pelo arquivo "ipython". nesta edição, a primeira linha a apontar para a versão python atual que você deseja. ou seja, a saída de "which python", ou seja:

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

Observe que mudei meu ambiente python de py2 (executando python 2.7) para py3 (executando python 3.5).

Salve o arquivo. E execute o jupyter notebook, agora ao criar um novo notebook a opção "Python 3" deve estar visível.

Felicidades!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.