ipython читає неправильну версію python


103

У мене виникли проблеми з Python, iPython та бібліотеками. Наступні моменти показують ланцюжок проблемності. Я запускаю Python 2.7 на Mac Lion.

  1. iPython не читає бібліотеки scipy, matplotlib, але він читає numpyt.
  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. Я також спробував перевстановити все через домашню мову та змінити шлях .bash_profile.


6
ipythonСценарій «прив'язаний» до конкретної версії Python вона була встановлена з - він не буде автоматично перемикатися на те , що ви встановили в минулому. Якщо ви спочатку встановили 2.7.1, потім IPython, а потім 2.7.2 від джерела, ваш IPython буде продовжувати використовувати 2.7.1. Вам потрібно або скасувати всі ваші недоліки, повернутися до оригінальної версії Python і з'ясувати, в чому причина полягала в точці 1; по черзі перевстановіть IPython, використовуючи будь-яку установку Python, щоб отримати доступ до потрібних бібліотек.
мільйоз

Чи можете ви бути більш конкретними? ... дякую
Diego-MX

1
Конкретно щодо якої частини? Як працює запуск IPython чи як усунути проблему?
мільйоза

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 або будь-які бібліотеки в ній.
мільйон

1
Бібліотеки працюють однаково. Якщо після встановлення Python 2.7.2 з джерела ви встановили numpy тощо , вони, ймовірно, були встановлені в каталог 2.7.2. Це означає, що версія Python 2.7.1 взагалі не бачить цих бібліотек. Оскільки IPython був встановлений з 2.7.1, він також не міг бачити ці бібліотеки. В основному, у вашій системі може бути стільки повністю окремих копій Python, але важко відстежувати, яка з них використовується для чого. Якщо ви не знаєте, чим займаєтесь, найкраще почати зі вбудованої версії Python та просто перевстановити відсутні бібліотеки
millimoose

Відповіді:


147

Добре швидко виправити:

which python

дає вам /usr/bin/python, правда? Зробіть

which ipython

і я думаю, що це буде /usr/local/bin/ipython. Давайте заглянемо всередину:

Редагувати 7.9.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())

І моя працює належним чином так, але моя ситуація не зовсім подібна до ОП.


Оригінальна відповідь - 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/…
розбір

@Matt. Я також переживав. У моєму випадку "python -m IPython" буде викликати потрібну мені версію. Але просто "ipython", він запустив копію, яка використовує старий python2. Таємниця полягає в тому, що якщо я роблю "який ipython", він вказує на virtualenv копію з вмістом файлу python, мабуть, правильним.
kawingkelvin

15

Публікація коментаря @ Метта як відповідь, просто тим, що вона більш помітна

python -m IPython

Завантажує ipython як модуль з будь-яким пітоном, доступним спочатку на шляху. У моєму випадку я мав одну попередньо встановлену і одну, яку я додав з варіння. Це просто чудово працює.


Можливо, це не відповідь на це питання, але це відповідь на питання: "як запустити ipython з будь-якою інстальованою версією python". Дякую.
Салянгоз

9

Що з використанням virtualenv? Мені дуже подобається. Можливо, це не швидший шлях, але я думаю, що це дуже зрозуміло.

Створюючи virtualenv, ви можете вказати шлях python за допомогою прапора -p.

для пітона 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

2
Це стара нитка, але я також натрапив на virtualenvs і люблю їх приємно розробляти продукти. З метою "повсякденного" аналізу, я, швидше, просто маю пряму зручну версію python / ipython у своїй системі.
Дієго-MX

1
python -m IPythonпочне ipython із заданою версієюpython
Xiao

1
зауважте, що python -m IPythonпотрібно встановити це:pip install ipython
Xiao

6

По-перше, я би переконався, що ви використовуєте правильний пітон. У командному рядку введіть:

which python
python -V

Перший покаже вам шлях, другий - вам використовується версія Python.


Гаразд, це дає мені Python 2.7.2 on / 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. 🙂

(До речі, мій ipythonвстановлений через homebrew, за замовчуванням він отримає запуск ipython у python 3.)

$ brew install ipython

2

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

td; lr виникають проблеми через "хешування" оболонки та змінні шляху.


також загальною доброю практикою є встановлення ipython у virtualenv. ви which pythonповинні вказати на бінарний файл virtualenv python.
розбір

Хешшю оболонки вкусив мене навіть після встановлення 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

1

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

  1. Виконаний файл ipython- це насправді сценарій Python.
  2. Пакет IPython встановлюється окремо для кожного перекладача, з яким ви працювали pip intall.

Якщо у версії Python, з якою ви запущені, встановлений пакет IPython, ви можете просто зробити це

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

Це запустить ipythonсценарій з потрібним інтерпретатором замість того, що вказано в шебангу.


Замість того, щоб викликати вищезазначене кожен раз, як я встановлю це як за замовчуванням, щоб кожен раз, коли я вводив ipythonсвою оболонку, автоматично читав спеціальний інтерпретатор замість типового?
Срівацан

Додайте скрипт, який робить це до шляху перед замовчуванням. Але вам доведеться возитися з оточенням.
Божевільний фізик

0

Ваша проблема полягає в тому, щоб ipython використовував правильний python.

тому виправлення проблеми полягає в тому, щоб змусити ipython використовувати правильний python (на якому встановлені бібліотеки на зразок 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

Усі відповіді, згадані тут, не допомагають вирішити проблему, якщо ви використовуєте анаконду чи іншу обгортку віртуального середовища.

Ця відповідь заснована на припущенні, що ви використовуєте анаконда.

Скажімо, ви перебуваєте в середовищі 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, яку ви хочете. тобто вихід "який пітон", тобто:

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

Зауважте, що я змінив середовище python з py2 (запуск python 2.7) на py3 (запуск python 3.5).

Збережіть файл. І запускайте ноутбук з юпітером, тепер при створенні нового ноутбука параметр "Python 3" повинен бути видно.

Ура!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.