Scrapy 抛出 ImportError: cannot import name xmlrpc_client

Posted

技术标签:

【中文标题】Scrapy 抛出 ImportError: cannot import name xmlrpc_client【英文标题】:Scrapy throws ImportError: cannot import name xmlrpc_client 【发布时间】:2015-09-07 00:17:51 【问题描述】:

通过 pip 安装 Scrapy 并拥有 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

但我可以导入模块:

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

发生了什么事?

【问题讨论】:

您是否尝试卸载并重新安装six 【参考方案1】:

我刚刚在我的 OS X 上解决了这个问题。

请先备份您的文件。

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 已准备就绪。


如果遇到错误rm: /System/Library/... Operation not permitted

请尝试禁用System Integrity Protection 见Operation Not Permitted when on root El capitan (rootless disabled)

【讨论】:

这里也发生过。似乎是 OS X 独有的 这对我有帮助。我已经卸载了scrapy。执行上述命令,然后安装scrapy 1.0.0:sudo pip install scrapy==1.0.0。谢谢你:) 老兄,你节省了我的时间! 第二行在 OS X El Capitan 上抛出错误提示“rm: /System/Library/... Operation not allowed” @rraallvv 您可以尝试禁用系统完整性保护。见***.com/questions/32659348/…【参考方案2】:

这是 Mac OSX 上 Scrapy 的一个已知问题。可以参考this link。

基本上问题出在系统中的 PYTHONPATH 上。要解决此问题,请将当前的 PYTHONPATH 更改为指向较新的或无 Mac OSX 版本的 Python。在运行 Scrapy 之前,请尝试:

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

如果可行,您可以永久更改 .bashrc 文件:

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

如果这些都不起作用,请查看上面的链接。

【讨论】:

【参考方案3】:

升级到 Scrapy 1.0 时,我遇到了同样的问题。经过无数次解决后,对我有用的解决方案是用 pip 卸载六个:

sudo pip 卸载六

然后通过 easy_install 重新安装六个

easy_install 六个

希望有效!

【讨论】:

这是迄今为止最简单的解决方案。 使用easy_install是discouraged nowadays。用 pip 升级更好。【参考方案4】:

比降级 Scrapy 更好的是升级你的 6 版本:

pip install --upgrade six scrapy

这将允许您使用 Scrapy 1.0 中的所有好东西;)

【讨论】:

【参考方案5】:

我也遇到了同样的问题。试试这个:

sudo pip 卸载scrapy

sudo pip install scrapy==0.24.2

那就试一试

【讨论】:

hm,升级 6 比使用旧的 Scrapy 更好。 pip install --upgrade six 应该这样做。 降级软件包并不能解决问题。它得到一个旧包,升级是有原因的......【参考方案6】:

我认为 OS X 上最好的解决方案应该是“不要使用系统 python”。它会让生活更轻松。 This link 展示了如何做到这一点。

有一个已知问题会阻止 pip 更新系统包。必须解决这个问题才能成功安装 Scrapy 及其依赖项。以下是一些建议的解决方案:

(推荐)不要使用系统 python,安装一个不与系统其余部分冲突的新的更新版本。以下是使用自制包管理器的方法:

    按照http://brew.sh/ 中的说明安装自制软件 更新您的 PATH 变量以声明应在系统软件包之前使用自制软件包(如果您使用 zsh 作为默认 shell,请将 .bashrc 更改为 .zshrc):

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

    重新加载 .bashrc 以确保更改已发生:

来源 ~/.bashrc

    安装python:

brew 安装 python

    最新版本的 python 已将 pip 与它们捆绑在一起,因此您无需单独安装它。如果不是这种情况,请升级 python:

酿造更新; brew升级python

【讨论】:

以上是关于Scrapy 抛出 ImportError: cannot import name xmlrpc_client的主要内容,如果未能解决你的问题,请参考以下文章

scrapy调试时出现 ImportError: No module named win32api

Scrapy运行ImportError: No module named win32api错误

scrapy爬虫实例w3school报错ImportError: No module named w3school.items

Django 问题:django.setup() 抛出“ImportError: No module named 'project_name'”

IPython Notebook 抛出 ImportError – IPython 不会

PySpark 抛出 ImportError,但 Module 确实存在并且运行良好