出现错误: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.dll
和libeay32.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 后,一切都陷入了困境:
所以我没有遇到错误的PATH
s(但我确实改变了他们的顺序,所以 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位)