ipython читает неправильную версию Python

103

У меня были проблемы с Python, iPython и библиотеками. Следующие пункты показывают цепочку проблематики. Я запускаю Python 2.7 на Mac Lion.

  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.

Я пробовал несколько вещей, с которыми сталкивался в других блогах. Но ни один из них не помог, и, к сожалению, я не совсем понимаю, что делаю с некоторыми из них. Например: я попытался удалить и переустановить ipython с помощью easy_install и pip. Я также попытался переустановить все через homebrew и изменить путь .bash_profile.

Диего-MX
источник
6
ipythonСценарий «привязан» к конкретной версии Python она была установлена с - он не будет автоматически переключаться на то , что вы установили в прошлом. Если вы сначала установили 2.7.1, затем IPython, а затем 2.7.2 из источника, ваш IPython продолжит использовать 2.7.1. Вам нужно либо отменить все свои попытки, вернуться к исходной версии Python и выяснить, в чем причина пункта 1; либо переустановите IPython, используя ту установку Python, которая может получить доступ к нужным вам библиотекам.
millimoose
Не могли бы вы быть более конкретными? ... спасибо
Diego-MX
1
Конкретно о какой части? Как работает запуск IPython или как решить проблему?
millimoose
1
По сути, когда вы устанавливаете любую «программу» Python, такую ​​как IPython или даже easy_install, сценарий запуска для программы всегда использует исполняемый файл python, с которым он был установлен. Итак, если у вас был Python 2.7.1 без ваших библиотек, а затем вы установили IPython, IPython устанавливается «в» установку Python 2.7.1, и ссылка на ipythonисполняемый файл помещается в ваш PATH. Если вы затем установите Python 2.7.2 из исходного кода, это будет новая отдельная копия Python, она не будет обновлять существующую версию 2.7.1, в которой есть IPython. Таким образом, IPython не увидит копию 2.7.2 или какие-либо библиотеки в ней.
millimoose
1
Библиотеки работают так же. Если вы установили numpy и т. Д. После установки Python 2.7.2 из исходного кода, они, вероятно, были установлены в каталог 2.7.2. Это означает, что версия Python 2.7.1 вообще не увидит эти библиотеки. Поскольку IPython был установлен с 2.7.1, он также не мог видеть эти библиотеки. По сути, у вас может быть столько полностью отдельных копий Python в вашей системе, сколько вам нужно, но может быть сложно отслеживать, какая из них для чего используется. Если вы не знаете, что делаете, лучше всего начать со встроенной версии Python и просто переустановить недостающие библиотеки
millimoose

Ответы:

148

Хорошо, быстрое исправление:

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.


Оригинальный ответ - 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')()
    )

Ага - откройте /usr/local/bin/ipythonв своем редакторе (с привилегиями) и измените первую строку на

#!/usr/local/bin/python

сохраните, запустите iPython, он должен сказать, что он использует версию, которую вы хотите сейчас.

Мануэль Эберт
источник
41
в сомнении python -m IPythonэквивалентно ipython, ожидайте, что вы обязательно используете правильный Python.
Мэтт
2
также не забудьте закрыть терминал и открыть новый. так как PATH кэшируется оболочкой для повышения эффективности. вот как я получил это решение, работающее на меня. см .: conda.pydata.org/docs/…
parsethis
@ Матт. Я тоже испытал. В моем случае "python -m IPython" вызовет нужную мне версию. Но просто ipython, он запустил копию, которая использует старый python2. Загадка в том, что если я делаю «какой ipython», он указывает на копию virtualenv с этим содержимым файла python, очевидно, правильным.
kawingkelvin
15

Публикация комментария @Matt в качестве ответа, чтобы он был более заметным

python -m IPython

Загружает ipython как модуль с любым python, доступным по пути первым. В моем случае у меня был один предустановленный, а другой я добавил из brew. Это просто отлично работает.

sh87
источник
Возможно, это не ответ на этот вопрос, но это ответ на вопрос: «как запустить ipython с любой установленной версией python». Спасибо.
Салянгоз
9

А как насчет использования virtualenv? Мне это и вправду нравится. Возможно, это не самый быстрый способ, но я думаю, что это очень понятно.

Когда вы создаете virtualenv, вы можете указать путь Python с помощью флага -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

для Python 3.4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython
pvieytes
источник
2
Это старая ветка, но я тоже встречался с виртуальными виртуальными машинами, и они мне нравятся для разработки продуктов. Однако для целей «повседневного» анализа я бы предпочел иметь в своей системе обычную пригодную для использования версию python / ipython.
Diego-MX
1
python -m IPythonзапустит ipython с данной версиейpython
Сяо
1
обратите внимание, что python -m IPythonэто необходимо установить:pip install ipython
Xiao
6

Во-первых, я хотел бы убедиться, что вы используете правильный питон. В командной строке введите:

which python
python -V

Первый сообщит вам путь, второй - версию Python, которую вы используете.

Macduff
источник
Хорошо, это дает мне Python 2.7.2 на / usr / local / bin / python
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. 🙂

(Кстати, my ipythonis install via homebrew, по умолчанию он запускает ipython в python 3.)

$ brew install ipython
Джонни
источник
2

чрезвычайно актуально: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

td; lr проблемы возникают из-за «хеширования» оболочки и переменных пути.

проанализировать это
источник
Также хорошей практикой является установка ipython в файл virtualenv. вы which pythonдолжны указать на двоичный файл python virtualenv.
parsethis
Хеширование оболочки укусило меня даже после установки ipython внутри virtualenv. hash -rисправил для меня; Спасибо!
theY4Kman
1

Аналогичный метод с использованием pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Теперь он покажет правильную версию python

Python 3.4.5
Avikd
источник
1

Абсолютно простое решение, которое я мог придумать, не требующее возни с окружением, установленными файлами или чем-либо еще, основано на фактах, которые

  1. Исполняемый файл ipythonна самом деле является скриптом Python.
  2. Пакет IPython устанавливается отдельно для каждого интерпретатора, с которым вы работали pip intall.

Если в версии Python, с которой вы запускаете, установлен пакет IPython, вы можете просто сделать

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

Это запустит ipythonсценарий с нужным интерпретатором вместо того, который указан в файле shebang.

Безумный физик
источник
Вместо того, чтобы вызывать указанное выше каждый раз, как мне установить его по умолчанию, чтобы каждый раз, когда я набираю ipythonсвою оболочку, он автоматически считывал пользовательский интерпретатор вместо стандартного?
Srivatsan
Добавьте сценарий, который делает это, в путь перед значением по умолчанию. Но для этого нужно вмешиваться в окружающую среду.
Безумный физик
0

Ваша проблема в основном заключается в том, чтобы ipython использовал правильный питон.

поэтому решение проблемы - заставить ipython использовать правильный питон (на котором установлены библиотеки, такие как scipy)

Я написал здесь решение:

Как заставить iPython использовать Python 2 вместо Python 3

Хариш Каяроханам
источник
0

Я столкнулся с той же проблемой, но следующее было единственным решением, которое сработало для меня на OSX 12, Sierra.

ipython всегда запускался для python 3.6, но мне он был нужен для 2.7. Мне не удалось найти сценарий запуска ipython для 2.7, как и не удалось найти модуль IPython для выполнения python -m. Ни одна из brew instally ipython pip install ipythonили pip2 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исправит это и позволит вам просто запустить ipython2из командной строки

Для меня, поскольку я серьезно относился к использованию ipython для 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 или другую оболочку виртуальной среды.

Этот ответ основан на предположении, что вы используете анаконду.

Допустим, вы находитесь в среде python 3 и при создании записной книжки на jupyter notebook отображается «Python 2» вместо «Python 3».

Это потому, что «ipython» - это, по сути, запускаемый скрипт, и в этом скрипте упоминается, какая версия Python используется для выполнения команды. Все, что вам нужно сделать, это изменить эту строку, чтобы ipython использовал нужную вам версию python.

Сначала остановите сервер ipython и получите местоположение исполняемого файла python в текущей среде с помощью команды "which python"

Мой вывод:

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

Теперь получите расположение исполняемого файла ipython, используя команду "which ipython"

мой:

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

Обратите внимание, что он использует другую версию python, т.е. python из конкретной среды с другой версией python, то есть с запуском python из другой среды.

Теперь перейдите в каталог anaconda2 / bin (для пользователей Anaconda 3 это должен быть anaconda3 / bin) и найдите файл «ipython». в этом случае отредактируйте первую строку, указав ее на текущую версию python, которую вы хотите. то есть вывод «какой питон» т.е.

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

Обратите внимание, что я изменил среду python с py2 (работает python 2.7) на py3 (работает python 3.5).

Сохраните файл. И запустите jupyter notebook, теперь при создании новой записной книжки должна быть видна опция «Python 3».

Ура!

100раб
источник