出现错误:DLL 加载失败:操作系统无法运行 %1 - Python 2.7;报废模块;导入密码学

Posted

技术标签:

【中文标题】出现错误:DLL 加载失败:操作系统无法运行 %1 - Python 2.7;报废模块;导入密码学【英文标题】:Getting error: DLL load failed: The operating system cannot run %1 - Python 2.7; Scrapy Module; Importing Cryptography 【发布时间】:2014-05-13 02:32:05 【问题描述】:

我无法成功运行 Scrapy 教程(http://doc.scrapy.org/en/latest/intro/tutorial.html) 中的第一个命令。下面粘贴的代码副本是结果(最后有错误)。

Python 2.7 已安装,我按照 scrapy (http://doc.scrapy.org/en/latest/intro/install.html) 的安装说明进行操作。我在 Windows 7(64 位)上运行 Python 2.7.6 32 位

安装的其他方面:

    Twisted-13.2.0.dist-info zope.interface-4.1.1-py2.7 Scrapy-0.22.2-py2.7 lxml-3.3.3-py2.7 cssselect-0.9.1-py2.7 cryptography-0.3.dist-info pyOpenSSL-0.14-py2.7 pywin32_system32

这是错误信息:

C:\Python27\Scripts>scrapy startproject tutorial
    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 9, in <module>
        from scrapy.crawler import CrawlerProcess
      File "C:\Python27\lib\site-packages\scrapy\crawler.py", line 3, in <module>
        from twisted.internet import reactor, defer
      File "twisted\internet\reactor.py", line 38, in <module>
        from twisted.internet import default
      File "twisted\internet\default.py", line 56, in <module>
        install = _getInstallFunction(platform)
      File "twisted\internet\default.py", line 50, in _getInstallFunction
        from twisted.internet.selectreactor import install
      File "twisted\internet\selectreactor.py", line 18, in <module>
        from twisted.internet import posixbase
      File "twisted\internet\posixbase.py", line 24, in <module>
        from twisted.internet import error, udp, tcp
      File "twisted\internet\tcp.py", line 29, in <module>
        from twisted.internet._newtls import (
      File "twisted\internet\_newtls.py", line 21, in <module>
        from twisted.protocols.tls import TLSMemoryBIOFactory, TLSMemoryBIOProtocol
      File "twisted\protocols\tls.py", line 40, in <module>
        from OpenSSL.SSL import Error, ZeroReturnError, WantReadError
      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 4, in <module>
      File "C:\Python27\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py",      l3, in __init__
      self._ensure_ffi_initialized()
      File "C:\Python27\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", l9, in _ensure_ffi_initialized libraries)
      File "C:\Python27\lib\site-packages\cryptography\hazmat\bindings\utils.py", line 77, ind_ffi
        ext_package="cryptography",
      File "C:\Python27\lib\site-packages\cffi\api.py", line 341, in verify
        lib = self.verifier.load_library()
      File "C:\Python27\lib\site-packages\cffi\verifier.py", line 75, in load_library
        return self._load_library()
      File "C:\Python27\lib\site-packages\cffi\verifier.py", line 151, in _load_library
        return self._vengine.load_library()
      File "C:\Python27\lib\site-packages\cffi\vengine_cpy.py", line 138, in load_library
        raise ffiplatform.VerificationError(error)

cffi.ffiplatform.VerificationError: importing 'C:\\Python27\\lib\\site-packages\\cryptogr
\_Cryptography_cffi_48bbf0ebx93c91939.pyd': DLL load failed: The operating system cannot
1.**

【问题讨论】:

【参考方案1】:

我只是重新安装密码学以使其工作。

pip 卸载密码学

pip 安装密码

【讨论】:

对我来说也是如此,这是最好的建议!【参考方案2】:

正如上面其他人所说,加载了两个 .dll 文件,而不是使用 Scrapy 下载的 openssl。这两个 .dll 文件不兼容。

我通过将下载的 .dll 文件(我使用 Anaconda 安装 scrapy)作为环境变量中的更高优先级来解决此问题,如附图所示。

在环境变量中,在系统变量和“路径”中,我将如上所示的 Anaconda3 位置放在顶部,因此在 python 加载 openssl 时将其作为优先级

【讨论】:

Nevster...您的省时器!除了您的解决方案:它是系统变量中的“PATH”,您可以使用此技巧而不是“用户路径”环境。点赞! 同意@ZF007,应该使用PATH系统变量,而不是用户路径系统变量...【参考方案3】:

我今天在 Windows 7 系统上遇到了这个错误。我的问题类似于@user2314737、@voetsjoeba 和@Olegp。 libeay32.dll 和 ssleay32.dll 位于 Windows path 环境变量中与 Intel 相关的文件夹中。

不幸的是,我的系统被锁定(工作计算机),所以我无法移动文件或更改系统的路径变量。相反,我从 Python 使用的路径变量中手动删除了与 Intel 相关的项目:

import os
os.environ['path'] = ';'.join(
    filter(lambda x: 'intel' not in x.lower(), os.environ['path'].split(';'))
    )
import OpenSSL

【讨论】:

【参考方案4】:

正如其他答案中已经提到的,问题是由ssleay32.dlllibeay32.dll 两个文件引起的。 在 Python 中导入 OpenSSL 时出现错误

>>> from OpenSSL import crypto, SSL
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
ImportError: DLL load failed: The operating system cannot run %1.

这是我在 Windows 10 上解决问题的方法。如果您有 Windows 版 git(下载 here),您可以将这两个文件从 Git\mingw64\bin\ 复制到路径中的某个位置。对我有用的是将它们复制到 c:\Windows(或者复制到您启动 Python 的文件夹)。

在 cmd 提示符下查找 dll 文件的位置:

>where libeay32.dll
C:\Program Files (x86)\Intel\TXE Components\TCS\libeay32.dll
...
C:\Users\me\AppData\Local\Programs\Git\mingw64\bin\libeay32.dll

【讨论】:

【参考方案5】:

由于我极度沮丧,我将就此写下我自己的看法,并希望这可能有助于其他一些可怜的小伙子,因为他的问题在 Windows 上工作变得很糟糕。..

有故障的 libeay32.dll 和 ssleay32.dll 有类似的问题,或者看起来如此,但通过Process Monitor 确认。

在 System32 中找到这些 dll 后,一切都陷入了困境:

所以我没有遇到错误的PATHs(但我确实改变了他们的顺序,所以 system32 排在C:\Program Files (x86)\Intel\iCLS Client\ 之前。

接下来我用this site这里的其他人指出。我使用过 Win32 OpenSSL v1.0.2j Light,因为较新的版本(1.1.0b)由于某种原因没有为我生成这些 dll。

在不同的 bin 文件夹中生成它们,以便您看到它们是新的,然后将它们复制到 system32。瞧,scrapy 命令行有效。

另外,截至今天,anaconda 的 scrapy 1.1.2 没有创建用于运行 scrapy 命令的密钥文件,我打开和关闭了一个关于此问题的问题 here。

【讨论】:

【参考方案6】:

我遇到了这个问题,因为 libeay32.dll 和 ssleay32.dll 的另一个(旧?)版本在我自己的 OpenSSL 1.0.1g 安装之前位于 PATH 上。我建议你使用来自 SysInternals 的Process Monitor 来监控 python.exe 以查看它实际从哪里加载 OpenSSL DLL。

就我而言,违规者是我的驱动程序附带的C:\Program Files (x86)\Intel\iCLS Client\ 的一些英特尔组件。在 PATH 环境变量中移动我自己的 OpenSSL bin 目录后,一切都按预期工作。

【讨论】:

【参考方案7】:

@crazyzh1984 的方法有点复杂,但他在答案底部发布的补充非常有用。我在http://slproweb.com/products/Win32OpenSSL.html下载了“Win32 OpenSSL v1.0.1g Light”,然后我就可以成功安装pyOpenSSL了。

【讨论】:

【参考方案8】:

@lambokini 是对的,但我无法评论答案,所以来这个吧。

首先从http://www.openssl.org/下载openssl源码

第二次启动“Visual Studio 命令提示符”,按照安装指南(INSTALL.W32 或 INSTALL.W64)编译安装 openssl。

然后将“[openssl install path]\bin”添加到环境变量“path”中, 并且可以删除system32下的ssleay32.dll和libeay32.dll。

注意:dll 将从它搜索到的第一个位置加载。 例如:路径=xxx;d:\php5;d:\openssl\bin; 如果 PHP5 下也出现 ssleay32.dll 和 libeay32.dll, 然后python会加载那个。

【讨论】:

openssl 的二进制文件可从 here 获得,与 python 2.7.6 完美配合。【参考方案9】:

这是由于 _Cryptography_cffi_48bbf0ebx93c91939.pyd 依赖于 openssl dll ssleay32.dll 和 libeay32.dll。在windows上编译openssl后,你可以将这两个文件复制到system32。

【讨论】:

以上是关于出现错误:DLL 加载失败:操作系统无法运行 %1 - Python 2.7;报废模块;导入密码学的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:DLL加载失败:操作系统无法运行%1。 Python 2.7.12 | Anaconda 4.2.0(64位)

加载dll失败

无法导入numpy,DLL加载失败:找不到指定的模块

开机运行软件,出现kernel32.dll错误?求解决方案

开机加载模块失败是怎么回事?

Outlook 2010 mapi无法加载信息服务msncon.dll