Подтвердить что ты не робот

Ipython устанавливает новые модули

Я привык к функциональности R установки пакетов, и я пытаюсь сделать то же самое с ipython. Иногда следующий метод работает, но с другой стороны иногда это не так, и я хотел бы наконец выяснить, почему он работает только половину времени.

Обычно, чтобы установить модуль (например, модуль requests), я бы набрал следующее после открытия нового терминала:

$ sudo pip install requests
Password: ******* 

После этого должно появиться сообщение о том, что установка прошла успешно или что она уже установлена.

Requirement already satisfied (use --upgrade to upgrade): 
requests in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up... 

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

$ python
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:20:15) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> 

Теперь я открываю PyLab через Альфреда, и он выдает мне ошибку.

Welcome to pylab, a matplotlib-based Python environment [backend: WXAgg].
For more information, type 'help(pylab)'.

In [1]: import requests
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
/Users/vincentwarmerdam/<ipython-input-1-686486c241c8> in <module>()
----> 1 import requests

ImportError: No module named requests

Я прочитал некоторую справку из другого вопроса о StackOverflow (здесь), который предлагает установить модуль из оболочки ipython. Это дает еще более странный ответ:

In [2]: !pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in     
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up...

In [3]: import requests
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
/Users/vincentwarmerdam/<ipython-input-3-686486c241c8> in <module>()
----> 1 import requests

ImportError: No module named requests

Это кажется мне очень странным. В системе установлено несколько версий python? Как я мог это проверить? Нужно ли указывать ipython на местоположение установленного кода?

4b9b3361

Ответ 1

на самом деле существует гораздо более элегантное решение. когда pip установлен, то внутри python вы также можете делать такие вещи:

import pip

def install(package):
   pip.main(['install', package])

install('requests') 

что проще. после входа в virtualenv вы можете просто убедиться, что у вас есть то, что вам нужно в сеансе, в котором вы находитесь.

изменить

Другой альтернативой будет использование магии %%bash.

%%bash
pip install requests

edit2

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

! pip install requests

Ответ 2

Вот что я сделал, это заставило его работать; откройте iypthon через командную строку и введите

import sys
sys.path 

Здесь отображается список папок, в которых расположены другие модули python. Для меня это было:

['',
 '/Library/Frameworks/Python.framework/Versions/7.3/bin',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/pandas-0.10.0-py2.7-macosx-10.5-i386.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/googlemaps-1.0.2-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/oauth-1.0.1-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/oauth2-1.5.211-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/httplib2-0.7.7-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/selenium-2.28.0-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/jellyfish-0.2.0-py2.7-macosx-10.5-i386.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/python_yelp-0.1.1-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/pymongo-2.4.2_-py2.7-macosx-10.5-i386.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/lucene_querybuilder-0.1.6-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/html2text-3.200.3-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-dynload',
 '/Users/vincentwarmerdam/Library/Python/2.7/lib/python/site-packages',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/PIL',
 '/Library/Python/2.7/site-packages',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/IPython/extensions] 

С этой информацией я теперь знал, где ipython ищет модули, которые можно импортировать. Поэтому я загрузил библиотеку запросов вручную, добавив ее в тот же корневой каталог, что существует следующий каталог:

/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/requests 

Эта папка содержит модули python, принадлежащие запросам. Единственное, что мне теперь нужно было сделать, это убедиться, что ipython знает, что эта папка существует. Это было сделано путем обновления sys.path.

req_link = '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/requests'
sys.path.append(req_link) 

После этого я больше не получил ошибку.

import requests 

Просто работает.

Также после перезагрузки ipython я обнаружил, что ipython автоматически обновляет новый путь в списке sys.path.

Ответ 3

Если новые пакеты установлены на терминале, но не импортированы в ipython, то очень вероятно, что у вас есть две версии python, установленные в вашей библиотеке. В связи с этим существует отдельный каталог сайтов-пакетов, откуда импортируются пакеты на терминале и на ноутбуке ipython. Чтобы проверить, так ли это. При использовании терминала:

import sys
sys.path

Это покажет, где находятся модули python для python, которые вы используете на терминале. Теперь в ноутбуке ipython используйте:

import sys
sys.path

Это покажет, где находятся модули python для python, которые вы используете на терминале.

Теперь, если два пути различны, вы знаете, что используете две разные установки python. Чтобы решить эту проблему, скопируйте установленные пакеты из каталога сайтов-пакетов терминала python в каталог сайтов-пакетов ipython.

Ответ 4

У меня была такая же проблема, когда я пытался установить patool, но оказалось, что это связано с более чем одним установленным интерпретатором, и когда я запустил его с ipython, это сработало.