Python 在64位Windows上获取和安装crypto.dll的位置
注意:这不是Visual Studio的问题,而是不兼容的dll版本的问题。以下步骤复制了该问题,因为在Visual Studio中以调试模式运行会在引发异常时中断。如果您只是运行,抛出的异常将在其他地方处理,并且程序工作正常。但由于我在调试模式下花费了大量时间,所以我更愿意解决这个问题 调试时,我希望能够逐步进入我在VisualStudio中添加到虚拟环境中的模块。我收到一个无法修复的“未找到库”错误。以下是步骤:Python 在64位Windows上获取和安装crypto.dll的位置,python,python-3.x,dll,openssl,python-import,Python,Python 3.x,Dll,Openssl,Python Import,注意:这不是Visual Studio的问题,而是不兼容的dll版本的问题。以下步骤复制了该问题,因为在Visual Studio中以调试模式运行会在引发异常时中断。如果您只是运行,抛出的异常将在其他地方处理,并且程序工作正常。但由于我在调试模式下花费了大量时间,所以我更愿意解决这个问题 调试时,我希望能够逐步进入我在VisualStudio中添加到虚拟环境中的模块。我收到一个无法修复的“未找到库”错误。以下是步骤: 在VisualStudio中创建一个新的Python应用程序 为该应用程序创建
pip将twilio安装到虚拟环境中。你得到了
跟踪输出
asn1crypto.\u ffi.LibraryNotFoundError:找不到库libcrypto
asn1crypto
中名为\u big\u num\u ctypes.py
的文件中。引发此问题的代码行是:
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
if not libcrypto_path:
raise LibraryNotFoundError('The library libcrypto could not be found')
与前面一样,导入行抛出异常,但未捕获异常,并且从不执行'except'子句中的行
从twilio.rest导入客户端
更新2:在@pratek和@user8212173之后,我不知何故让它起到了作用。但现在它不再起作用了。正如两人所建议的,问题在于crypto.dll不存在。因此,我通过以下步骤添加它,但没有成功:
我搜索了很多,发现您缺少
crypto.dll
文件。您的代码正在查找此dll文件,但找不到它
请注意,pip install crypto
不会安装此文件,因为这是python库,代码正在查找dll文件
ctypes.util.find_库
从windows环境路径变量中搜索dll文件
为了验证我检查过了
find_library('l2gpstore')
>>'C:\\WINDOWS\\system32\\l2gpstore.dll'
find_library('java')
>>'C:\\Program Files\\Java\\jdk-9.0.4\\bin\\java.dll'
此外,您应该从这里使用libcrypto
模块安装OpenSSL
OpenSSL安装
主源代码保存在我们的git存储库中,即
可通过网络访问并在GitHub上克隆,位于
. bug和拉补丁(问题和解决方案)
拉请求)应该是GitHub repo上的文件。请熟悉
你自己拿着执照
关于OpenSSL的libcrypto
libcrypto(具有特定于平台的命名):
提供SSL/TLS所需的通用加密和X.509支持,但
从逻辑上讲,这不是它的一部分
安装二进制文件并检查环境变量中某个路径字符串中的crypto.dll
是否可用后,应解决此问题
如果没有,则将其添加到path变量中并进行检查
更新:
更新,因为问题已更新且问题已再次出现
与1.0.2相比,OpenSSL 1.1.0在体系结构上有一些变化
2018年9月13日—OpenSSL 1.1.0及更高版本与以前的版本有很大不同。用户应同时安装1.0.2系列(LTS)和1.1.1系列(LTS),以实现最大的应用程序兼容性。开发人员需要重新编译他们的软件以支持1.1.1。有关更多详细信息,请参阅官方OpenSSL发布策略文档普拉蒂克昨天
如果从Github打开1.0.2,可以看到crypto.h
文件,最新版本中缺少相同的文件。而且OpenSSL
在DLL
名称中有变化,他们
您需要在帖子中发布使用asn1crypto
库的代码。在您的帖子中没有明确使用asn1crypto的代码。因此,无法使用pipenv
重现您的问题
确保您也在使用更新的库
我不建议从不可靠的源下载DLL源,如
如果您对最新版本的
OpenSSL
和asn1crypto
有问题,最好将OpenSSL
降级到1.0.2
,考虑到它附带crypto.h
文件,我认为这会起作用
祝你好运 我试图在我的计算机上重现错误,当我运行“错误生成”文件
\u big\u num\u ctypes.py
时成功了。虽然我没有Visual Studio,但错误源于缺少crypto.dll
文件。我们将一步一步地推演。让我们首先检查文件\u big\u num\u ctypes.py
中导致错误的代码段:
#imports
from ctypes.util import find_library
.
.
from .._ffi import LibraryNotFoundError, FFIEngineError
try:
# On Python 2, the unicode string here may raise a UnicodeDecodeError as it
# tries to join a bytestring path to the unicode name "crypto"
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
if not libcrypto_path:
raise LibraryNotFoundError('The library libcrypto could not be found')
.
.
except (AttributeError):
raise FFIEngineError('Error initializing ctypes')
并对库导入进行了回溯
:
Traceback (most recent call last):
File "_big_num_ctypes.py", line 27, in <module>
from .._ffi import LibraryNotFoundError, FFIEngineError
ValueError: attempted relative import beyond top-level package
在第二次运行时,出现丢失的libcrypto库错误:
asn1crypto._ffi.LibraryNotFoundError: The library libcrypto could not be found
当在C:\Windows\System32和/或SYSWOW64(对于64位)上找不到名为crypto的dll库时,会引发异常
在我们的例子中,搜索的是crypto.dll
,我在我的计算机上找不到这个文件。所以,我完全按照说明下载并安装了它。当我再次检查时:
>>> find_library('crypto')
'C:\\windows\\system32\\crypto.dll'
现在我再次运行了python\u big\u num\u ctypes.py
,得到了一个不同的回溯
:
Traceback (most recent call last):
File "_big_num_ctypes.py", line 37, in <module>
libcrypto = CDLL(libcrypto_path)
File "C:\ProgramData\Anaconda3\lib\ctypes\__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
这是我针对windows 10的解决方案,visual studio社区2017 打开文件C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python36\u 64\Lib\site packages\asn1crypto\u perf\u big\u num\u ctypes.py,然后打开C
Traceback (most recent call last):
File "_big_num_ctypes.py", line 27, in <module>
from .._ffi import LibraryNotFoundError, FFIEngineError
ValueError: attempted relative import beyond top-level package
from asn1crypto._ffi import LibraryNotFoundError, FFIEngineError
asn1crypto._ffi.LibraryNotFoundError: The library libcrypto could not be found
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
>>> from ctypes.util import find_library
>>> print(find_library("c"))
None
>>> find_library('crypto')
'C:\\windows\\system32\\crypto.dll'
Traceback (most recent call last):
File "_big_num_ctypes.py", line 37, in <module>
libcrypto = CDLL(libcrypto_path)
File "C:\ProgramData\Anaconda3\lib\ctypes\__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
#Output
.
----------------------------------------------------------------------
Ran 1 test in 0.771s
OK
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'libcrypto')