【问题标题】:Installing Python module with pip使用 pip 安装 Python 模块
【发布时间】:2023-09-13 16:15:01
【问题描述】:

我正在尝试安装一个名为 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()

【问题讨论】:

  • 你是import Scrapy还是import scrapy
  • 我实际上都遇到了导入错误。
  • sys.path 中是否有 /usr/local 路径?
  • @Miles: 如果/path/to/scrapy 显示使用信息但python /path/to/scrapy 引发ImportError,那么您的机器上至少有两个python 可执行文件并且pip 不会安装到默认值中一种可用作pythonhead /usr/local/bin/scrapy 显示了什么?
  • @Jud:“即使软件包本身没有安装在那里”是不正确的。 scrapy is 安装到 /usr/local/opt/... 中,否则 scrapy 命令将生成 ImportError 而不是使用信息。 @cm2's answer 提出了一种访问特定 python 可执行文件的简单方法。如果python2.7 别名被定义为指向#!/usr/local/opt/python/bin/python2.7,那么将#!/usr/bin/env python2.7 shebang 添加到任何包含import scrapy 的Python 脚本中或从命令行启动python2.7 就足够了。

标签: python import module scrapy


【解决方案1】:

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

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

【讨论】:

  • 原来我通过homebrew安装的Python版本和我手动安装的Python有冲突。
  • 很高兴你明白了。我想我们所有人都在说非常相似的事情,RE确保scrapy使用的是正确的 python。
【解决方案2】:

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

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

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

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

import scrapy

【讨论】:

  • 我将 pip 命令的输出添加到我的帖子中。据我所知,我只有 python 2.7.5。我也试过 import scrapy 无济于事。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    如果你在 Ubuntu 上运行:

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

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

    【讨论】:

      【解决方案5】:

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

      scrapy executable 中的 Python 代码如下所示:

         #!/usr/bin/env python
      
         from scrapy.cmdline import execute
         execute()
      

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

      根据documentation for the project,使用以下语法运行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 以帮助您启动和运行。

      希望这会有所帮助。

      【讨论】: