【问题标题】:Scrapy throws ImportError: cannot import name xmlrpc_clientScrapy 抛出 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

标签: python python-2.7 scrapy


【解决方案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 您可以尝试禁用系统完整性保护。见stackoverflow.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,安装一个不与系统其余部分冲突的新的更新版本。以下是使用自制包管理器的方法:

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

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

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

      来源 ~/.bashrc

      1. 安装python:

      brew 安装 python

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

      酿造更新; brew升级python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-18
        • 2018-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-04
        相关资源
        最近更新 更多