web-dev-qa-db-fra.com

Scrapy lève ImportError: impossible d'importer le nom xmlrpc_client

Après avoir installé Scrapy via pip, et avoir Python 2.7.10:

scrapy
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 7, in <module>
from scrapy.cmdline import execute
File "/Library/Python/2.7/site-packages/scrapy/__init__.py", line 48,  
in <module>
from scrapy.spiders import Spider
File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py",    
line 10, in <module>
from scrapy.http import Request
File "/Library/Python/2.7/site-packages/scrapy/http/__init__.py", line   
12, in <module>
from scrapy.http.request.rpc import XmlRpcRequest
File "/Library/Python/2.7/site-packages/scrapy/http/request/rpc.py",  
line 7, in <module>
from six.moves import xmlrpc_client as xmlrpclib
ImportError: cannot import name xmlrpc_client

Mais je peux importer un module:

Python 2.7.10 (default, Jun 10 2015, 19:42:47) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import scrapy
>>> 

Que se passe-t-il?

33
ilopezluna

Je viens de résoudre ce problème sur mon OS X.

Veuillez d'abord sauvegarder vos fichiers.

Sudo rm -rf /Library/Python/2.7/site-packages/six*
Sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six*
Sudo pip install six

Scrapy 1.0.0 est prêt à l'emploi.


Si vous rencontrez une erreur rm: /System/Library/... Operation not permitted

Veuillez essayer de désactiver Protection de l'intégrité du système
Voir Opération non autorisée sur root El capitan (rootless désactivé)

70
chengbo

Il s'agit d'un problème connu sur Mac OSX pour Scrapy. Vous pouvez vous référer à ce lien .

Fondamentalement, le problème concerne le PYTHONPATH dans votre système. Pour résoudre le problème, modifiez le PYTHONPATH actuel pour pointer vers la version Mac OSX la plus récente ou aucune de Python. Avant d'exécuter Scrapy, essayez:

export PYTHONPATH=/Library/Python/2.7/site-packages:$PYTHONPATH

Si cela a fonctionné, vous pouvez modifier le fichier .bashrc de façon permanente:

echo "export PYTHONPATH=/Library/Python/2.7/site-packages:$PYTHONPATH" >> ~/.bashrc

Si rien de tout cela ne fonctionne, jetez un œil au lien ci-dessus.

32
vedoc

J'ai eu le même problème exact lors de la mise à niveau vers Scrapy 1.0. Après de nombreux travaux, la solution qui a fonctionné pour moi était de désinstaller six avec pip:

Sudo pip désinstaller six

puis réinstaller six via easy_install

easy_install six

J'espère que ça marche!

18
Dan Banks

Mieux que de rétrograder Scrapy, c'est de mettre à jour votre version de six:

pip install --upgrade six scrapy

Cela vous permettra d'utiliser tous les goodies de Scrapy 1.0;)

5
Elias Dorneles

Je viens d'avoir le même problème. Essaye ça:

Sudo pip désinstaller scrapy

Sudo pip install scrapy == 0.24.2

Alors donnez-lui un coup de feu

3
iOSBeginner

Je pense que la meilleure solution sous OS X devrait être "N'utilisez pas le système python". Cela vous facilitera la vie. Ce lien montre comment procéder.

Il existe un problème connu qui empêche pip de mettre à jour les packages système. Ce problème doit être résolu pour réussir l'installation de Scrapy et de ses dépendances. Voici quelques solutions proposées:

(Recommandé) N'utilisez pas le système python, installez une nouvelle version mise à jour qui n'entre pas en conflit avec le reste de votre système. Voici comment le faire en utilisant le gestionnaire de paquets homebrew:

  1. Installez homebrew en suivant les instructions de http://brew.sh/
  2. Mettez à jour votre variable PATH pour indiquer que les packages homebrew doivent être utilisés avant les packages système (remplacez .bashrc par .zshrc si vous utilisez zsh comme shell par défaut):

echo "export PATH =/usr/local/bin:/usr/local/sbin: $ PATH" >> ~/.bashrc

  1. Rechargez .bashrc pour vous assurer que les modifications ont bien eu lieu:

source ~/.bashrc

  1. Installez python:

installer python

  1. Les dernières versions de python sont fournies avec pip afin que vous n'ayez pas besoin de l'installer séparément. Si ce n'est pas le cas, mettez à niveau python:

mise à jour de brassage; mise à niveau de python

1
Shupeng Xu