【问题标题】:Installing package dependencies for Scrapy为 Scrapy 安装包依赖项
【发布时间】:2014-08-11 21:28:12
【问题描述】:

因此,在用户需要为 Scrapy 安装的众多软件包中,我认为我在使用 pyOpenSSL 时遇到了问题。

当我尝试创建一个教程 Scrapy 项目时,我得到以下输出:

Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 168, in <module>
    execute()
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 122, in execute
    cmds = _get_commands_dict(settings, inproject)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 46, in _get_comma
nds_dict
    cmds = _get_commands_from_module('scrapy.commands', inproject)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 29, in _get_comma
nds_from_module
    for cmd in _iter_command_classes(module):
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 20, in _iter_comm
and_classes
    for module in walk_modules(module_name):
  File "C:\Python27\lib\site-packages\scrapy\utils\misc.py", line 68, in walk_mo
dules
    submod = import_module(fullpath)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\scrapy\commands\bench.py", line 3, in <mod
ule>
    from scrapy.tests.mockserver import MockServer
  File "C:\Python27\lib\site-packages\scrapy\tests\mockserver.py", line 6, in <m
odule>
    from twisted.internet import reactor, defer, ssl
  File "C:\Python27\lib\site-packages\twisted\internet\ssl.py", line 59, in <mod
ule>
    from OpenSSL import SSL
  File "build\bdist.win32\egg\OpenSSL\__init__.py", line 8, in <module>
  File "build\bdist.win32\egg\OpenSSL\rand.py", line 11, in <module>
  File "build\bdist.win32\egg\OpenSSL\_util.py", line 3, in <module>
ImportError: No module named cryptography.hazmat.bindings.openssl.binding

当我在谷歌上搜索最后一个错误(没有名为 cryptography.hazmat 的模块)时,我看到一些提到 pyOpenSSL。所以我继续尝试运行easy_install pyOpenSSL==0.14 以确保它是最新版本,但是当我这样做时,我得到了以下输出:

c:\python27\include\pymath.h(22) : warning C4273: 'round' : inconsistent dll lin
kage
        C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(51
6) : see previous definition of 'round'
c:\users\bk\appdata\local\temp\easy_install-tztawu\cryptography-0.4\temp\easy_in
stall-svxsjy\cffi-0.8.2\c\misc_win32.h(225) : error C2632: 'char' followed by 'b
ool' is illegal
c:\users\bk\appdata\local\temp\easy_install-tztawu\cryptography-0.4\temp\easy_in
stall-svxsjy\cffi-0.8.2\c\misc_win32.h(225) : warning C4091: 'typedef ' : ignore
d on left of 'unsigned char' when no variable is declared
c/_cffi_backend.c(5295) : warning C4146: unary minus operator applied to unsigne
d type, result still unsigned
c/_cffi_backend.c(5296) : warning C4146: unary minus operator applied to unsigne
d type, result still unsigned
c/_cffi_backend.c(5297) : warning C4146: unary minus operator applied to unsigne
d type, result still unsigned
c/_cffi_backend.c(5298) : warning C4146: unary minus operator applied to unsigne
d type, result still unsigned
error: Setup script exited with error: command '"C:\Program Files (x86)\Microsof
t Visual Studio 12.0\VC\BIN\cl.exe"' failed with exit status 2

所以我有点不知道我需要做什么才能让 Scrapy 正常运行

【问题讨论】:

  • 我安装了 Python 32 位以及 pyopenssl 32 位。不知道还有什么可能是错误的 64 位...

标签: python windows python-2.7 scrapy pyopenssl


【解决方案1】:

我强烈建议使用conda 而不是pip,尤其是在使用Windows 时。 在许多其他事情中,它将为您的系统获取适当的二进制文件。它使设置科学的 Python 环境(想想 Scipy、Numpy、Pandas ......)变得轻而易举。

所以,阅读Anaconda,安装Anaconda,然后执行:

conda create -n scrapyenv python=2  # creates a new py2 environment
activate scrapyenv                  # switch to the new environment
conda install scrapy                # install scrapy

仅当您希望将其封装在单独的环境中时,才需要执行步骤一和二。顺便说一句,如果你这样做conda install anaconda,将会安装一整套有用的软件包。

另外,如果conda 不包含pyOpenSSL 或者您不想安装anaconda,请查看教程How to install Scrapy in 64bit Windows 7 的第9 点。

【讨论】:

  • 我遇到了同样的依赖问题,用 conda 重新安装而不是 pip 解决了,谢谢
【解决方案2】:

我在 Mac OS 上遇到了同样的错误。

我通过使用 openssl 0.13 而不是最新版本解决了这个问题。

easy_install pyOpenSSL==0.13

pip install pyOpenSSL==0.13

【讨论】:

  • 为它的工作竖起大拇指。这是 2015 年,历史上更多的人在不知道它为什么工作的情况下完成了大部分事情......
  • 使用 pip 对我有用,但不需要指定版本
【解决方案3】:

我遇到了同样的问题,并尝试用第一个答案解决它,但它不起作用。 最后,我删除了 pyOpenSSL 并下载了 pyopenssl 安装程序。问题就解决了。 pyopenssl 的网址是: https://launchpad.net/pyopenssl

【讨论】:

    【解决方案4】:

    您应该先升级pip,然后再尝试安装Scrapy

    pip install --upgrade pip
    pip install Scrapy 
    

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2017-09-30
      • 2021-12-18
      • 1970-01-01
      • 2017-10-31
      • 2017-01-31
      • 1970-01-01
      • 2021-05-01
      • 2016-08-21
      相关资源
      最近更新 更多