web-dev-qa-db-fra.com

ipython installe de nouveaux modules

Je suis habitué à la fonctionnalité R d'installation de packages et j'essaie de faire la même chose avec ipython. Parfois, la méthode suivante fonctionne mais parfois encore, cela ne fonctionne pas et j'aimerais enfin savoir pourquoi cela ne fonctionne que la moitié du temps. 

Normalement, pour installer un module (comme le module requests par exemple), je taperais ce qui suit après avoir ouvert un nouveau terminal: 

$ Sudo pip install requests
Password: ******* 

Ce message serait ensuite suivi d'un message indiquant que l'installation a réussi ou qu'elle a déjà été installée. 

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

Ce qui suggère que le code peut être consulté. Et en effet, si j’exécute maintenant python à partir du terminal, il affiche une bonne réponse sans aucune erreur. 

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

J'ouvre maintenant PyLab par Alfred et cela me donne une erreur. 

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

J'ai lu une aide d'une autre question sur stackoverflow (ici http://bit.ly/1148FRL ) qui suggère d'installer le module depuis ipython Shell. Cela donne une réponse encore plus déconcertante: 

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

Cela me semble très étrange. Existe-t-il plusieurs versions de python installées sur le système? Comment pourrais-je vérifier cela? Dois-je indiquer à ipython l'emplacement du code installé? 

13
cantdutchthis

en fait, il existe une solution beaucoup plus élégante. quand pip est installé, vous pouvez faire des choses comme celle-ci dans python: 

import pip

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

install('requests') 

ce qui est plus facile. une fois connecté à virtualenv, vous pouvez simplement vous assurer que vous disposez de ce dont vous avez besoin pendant la session dans laquelle vous vous trouvez. 

modifier

Une autre alternative serait d'utiliser la magie %%bash.

%%bash
pip install requests

edit2

Si vous voulez la sortie standard, vous pouvez même utiliser le bang d’exclamation. 

! pip install requests
32
cantdutchthis

Voici ce que j'ai fait pour que ça fonctionne. ouvrez iypthon via la ligne de commande et tapez 

import sys
sys.path 

Ceci affiche une liste de dossiers contenant d’autres modules python. Pour moi c'était: 

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

Avec cette information, je savais maintenant où ipython cherchait les modules que l’on pouvait importer. J'ai donc téléchargé manuellement la bibliothèque de demandes, l'ajoutée au même répertoire racine de sorte que le répertoire suivant existe: 

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

Ce dossier contient les modules python appartenant aux requêtes. La seule chose que je devais maintenant faire était de m'assurer que ipython sait que ce dossier existe. Ce qui a été fait en mettant à jour sys.path. 

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

Après cela, je n'ai plus l'erreur. 

import requests 

Fonctionne juste. 

Aussi, après avoir redémarré ipython, j’ai trouvé qu’ipython met automatiquement à jour le nouveau chemin dans la liste sys.path

7
cantdutchthis

Si les nouveaux packages installés sont importés sur Terminal mais pas dans ipython notebook, il est fort probable que deux versions de python soient installées sur votre bibliothèque. Pour cette raison, il existe un répertoire site-packages distinct d'où les packages sont importés sur le terminal et dans le bloc-notes ipython. Pour vérifier si tel est le cas. Sur terminal use: 

import sys
sys.path

Cela montrera où se trouvent les modules python pour python que vous utilisez sur le terminal. Maintenant, dans ipython notebook, utilisez:

import sys
sys.path

Cela montrera où se trouvent les modules python pour python que vous utilisez sur le terminal.

Maintenant, si les deux chemins sont différents, vous savez que vous utilisez deux installations différentes de python. Pour résoudre ce problème, copiez les packages installés du répertoire site-packages du terminal python dans le répertoire site-packages de ipython.

0
Dhananjay Mehta

J'ai eu le même problème en essayant d'installer patool, mais il s'est avéré que c'était dû à plus d'un interprète installé, et quand je l'ai exécuté depuis ipython, cela a fonctionné. 

0
Sinux1