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? 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
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
.
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.
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.
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