11

我正在尝试安装一个名为 Scrapy 的模块。我安装它使用

pip install Scrapy

我在 /usr/local/lib/python2.7/site-packages 中看到了“scrapy”文件夹,但是当我尝试在 Python 程序中导入它时,说没有该名称的模块。关于为什么会发生这种情况的任何想法?

编辑:这是 pip 命令的输出:

    Downloading/unpacking Scrapy
  Downloading Scrapy-0.20.0.tar.gz (745kB): 745kB downloaded
  Running setup.py egg_info for package Scrapy

    no previously-included directories found matching 'docs/build'
Requirement already satisfied (use --upgrade to upgrade): Twisted>=10.0.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): w3lib>=1.2 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /usr/local/lib/python2.7/site-packages (from Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/site-packages (from w3lib>=1.2->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages/setuptools-1.1.6-py2.7.egg (from zope.interface>=3.6.0->Twisted>=10.0.0->Scrapy)
Installing collected packages: Scrapy
  Running setup.py install for Scrapy
    changing mode of build/scripts-2.7/scrapy from 644 to 755

    no previously-included directories found matching 'docs/build'
    changing mode of /usr/local/bin/scrapy to 755
Successfully installed Scrapy
Cleaning up...

当我运行 /usr/local/bin/scrapy 时,我得到了命令的用法和可用的命令。我注意到我的 /usr/local/bin 中有一个 python2.7 和 python2.7-32,我记得因为 Mavericks 的问题安装了 32 位版本。

这是输出python /usr/local/bin/scrapy

Traceback (most recent call last): File "/usr/local/bin/scrapy", line 3, in <module> from scrapy.cmdline import execute ImportError: No module named scrapy.cmdline 

并且head /usr/local/bin/scrapy

#!/usr/local/opt/python/bin/python2.7 from scrapy.cmdline import execute execute()
4

5 回答 5

10

您使用的是 Homebrew 还是 MacPorts 之类的?正如@JFSebastian 所说,听起来你在混合OS X 附带的默认python 和通过包管理器安装的python 时遇到问题......试试看/usr/local/opt/python/bin/python2.7 -m scrapy是否会抛出ImportError.

如果可行,那么您可能需要考虑将该python 可执行文件设为您的默认值。类似的东西alias python2.7=/usr/local/opt/python/bin/python2.7,然后总是使用python2.7而不是默认的python. 您也可以只指向python/urs/local...位,但是如果出于某种原因需要它,您将无法轻松访问系统(OS X 提供的)python。

于 2013-11-18T05:12:08.510 回答
2

编辑:您可以强制 pip 安装到备用位置。详情在这里:Install a Python package into a different directory using pip? . 如果您的系统上确实有额外的 Python 文件夹,也许您可​​以尝试将 scrapy 指向这些文件夹,即使只是为了临时解决方案。

您可以发布 pip 命令的输出吗?也许它在某个地方失败了?

另外,您的机器上是否有可能有两个版本的 Python?Pip 仅安装到一个位置,但您路径上的 Python 版本可能不同。

最后,有时给 pip 的包名称与用于导入的名称不完全相同。检查包的文档。我快速浏览了一下,导入应该是小写的:

import scrapy
于 2013-11-12T20:40:45.873 回答
1

当所有其他方法都失败时,您始终可以将环境变量 PYTHONPATH(请参阅永久将目录添加到 PYTHONPATH以获取帮助)设置为安装 Scrapy 的路径。(如果您没有使用 virtualenv——如果您愿意,请指定以便我们提供帮助,通常最好也提供操作系统)

于 2013-11-20T18:48:09.387 回答
0

如果你在 Ubuntu 上运行:

使用官方的Ubuntu 软件包,它已经为您解决了所有依赖项,并不断更新最新的错误修复。

或者,即使它解决了您的问题,最好还是在虚拟环境中安装 python 库,使用virtualenvwrapper将库分开,尝试检查 apt-get 安装日志以找出添加了哪些工具,然后删除 scrapy python库并将其重新安装在虚拟环境中。使用点子

于 2013-11-18T05:59:45.250 回答
0

看起来安装在 Python 路径上的 scrapy 模块是一个可执行文件,它将为您引导一个 Scrapy 项目目录。

scrapy 可执行文件中的 Python 代码如下所示:

   #!/usr/bin/env python

   from scrapy.cmdline import execute
   execute()

这旨在从命令行运行,而不是导入到您自己的 Python 项目模块中。

根据项目的文档,使用以下语法运行scrapy可执行文件:

scrapy startproject <your-project-name>

将引导一个具有以下目录结构的 Scrapy 项目:

your-project-name/
scrapy.cfg
tutorial/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        ...

文档中有许多示例演示了如何创建和运行自己的爬虫、链接提取器等,以及如何操作使用应用程序检索的数据。它们每个都演示了从 scrapy 包中的子目录导入适当的 Python 以帮助您启动和运行。

希望这会有所帮助。

于 2013-11-21T02:45:58.780 回答