ipython instaluje nowe moduły

Jestem przyzwyczajony do funkcji r instalowania pakietów i próbuję zrobić to samo z ipythonem. Czasami następująca metoda działa, ale czasami nie i chciałbym w końcu dowiedzieć się, dlaczego działa tylko przez połowę czasu.

Normalnie aby zainstalować moduł (jak na przykład moduł requests) wpisałbym po otwarciu nowego terminala:

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

Następnie pojawi się komunikat informujący, że instalacja przebiegła pomyślnie lub że został już zainstalowany.

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

Co sugeruje, że kod jest dostępny. I rzeczywiście, jeśli uruchamiam Pythona teraz z terminala, pokazuje dobrą odpowiedź bez żadnych błędów.

$ 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
>>> 

Otwieram PyLab przez Alfreda i daje mi to błąd.

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

Przeczytałem pomoc z innego pytania na temat stackoverflow (tutaj http://bit.ly/1148FRL) co sugeruje zainstalowanie modułu z powłoki ipython. To daje jeszcze więcej ODPOWIEDŹ:

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
To wydaje mi się bardzo dziwne. Czy w systemie jest zainstalowanych wiele wersji Pythona? Jak mogę to sprawdzić? Czy muszę wskazywać ipython na lokalizację zainstalowanego kodu?
Author: cantdutchthis, 2013-04-12

4 answers

W rzeczywistości jest o wiele bardziej eleganckie rozwiązanie. gdy PIP jest zainstalowany, to w Pythonie możesz również robić takie rzeczy:

import pip

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

install('requests') 
Co jest łatwiejsze. po zalogowaniu się do virtualenv możesz po prostu upewnić się, że masz to, czego potrzebujesz w sesji, w której jesteś. spokojnie.

Edit

Inną alternatywą byłoby użycie magii %%bash.

%%bash
pip install requests

Edit2

Jeśli chcesz standardowego wyjścia, można nawet użyć wykrzyknika huk.

! pip install requests
 32
Author: cantdutchthis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 07:17:00

Oto, co zrobiłem, aby to działało; otwórz iypthon za pomocą linii poleceń i wpisz

import sys
sys.path 

Pokazuje listę folderów, w których znajdują się inne moduły Pythona. Dla mnie to było:

['',
 '/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] 

Dzięki tym informacjom, teraz wiedziałem, gdzie ipython szuka modułów, które można importować. Więc pobrałem bibliotekę requests ręcznie, dodałem ją do tego samego katalogu głównego, tak że istnieje następujący katalog:

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

Ten folder zawiera moduły Pythona, które / align = "left" / Jedyne, co teraz musiałem zrobić, to upewnić się, że ipython wie, że ten folder istnieje. Co zostało zrobione przez aktualizację sys./ align = "left" /

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

Po tym nie mam już błędu.

import requests 
Po prostu działa.

Również po ponownym uruchomieniu ipython, odkryłem, że ipython automatycznie aktualizuje nową ścieżkę do listy sys.path.

 7
Author: cantdutchthis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 15:40:26

Jeśli nowe pakiety są importowane na Terminal, ale nie są importowane do notebooka ipython, to jest bardzo prawdopodobne, że masz dwie wersje Pythona zainstalowane w bibliotece. Z tego powodu istnieje oddzielny katalog site-packages, z którego importowane są pakiety na terminal i notebook ipython. Aby sprawdzić, czy tak jest. Przy użyciu terminala:

import sys
sys.path

To pokaże, gdzie znajdują się Moduły Pythona, których używasz w terminalu. Teraz w notebooku ipython użycie:

import sys
sys.path

To pokaże, gdzie znajdują się Moduły Pythona, których używasz w terminalu.

Teraz, jeśli obie ścieżki są różne wiesz, że używasz dwóch różnych instalacji Pythona. Aby rozwiązać ten problem, skopiuj zainstalowane pakiety z katalogu site-packages w terminalu python do katalogu site-packages w ipython.

 0
Author: Dhananjay Mehta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 14:53:38

Miałem ten sam problem podczas próby zainstalowania patoola, ale okazało się, że jest to spowodowane więcej niż jednym interpreterem zainstalowanym, a gdy uruchomiłem go z ipythona zadziałało.

 0
Author: Sinux1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-18 00:22:19