windows上运行Pyzip (Z/IP Client)的一个小错误

在尝试运行Pyzip时,遇到WindowsError 126,原因是缺少libeay32.dll和ssleay32.dll动态库。错误出现在`openssl.py`文件的库加载部分。解决方案是在系统路径下创建"C:\OpenSSL-Win64"目录,并将所需DLL文件拷贝至此,确保与DTLS安装目录不冲突,之后程序正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



按照官网上的说明安装并运行Pyzip 时遇到如下的错误

http://zts.sigmadesigns.com/documentation/zipgateway-2-60-docs


【错误】

D:\sdk\zwave\zip\pyzip>setPATH=%PATH%;C:\Python27

 

D:\sdk\zwave\zip\pyzip>set PYTHONPATH=.

 

D:\sdk\zwave\zip\pyzip>pythonpyzip/gui.py

Traceback (most recent call last):

 File "pyzip/gui.py", line 8, in <module>

   from FirmwareUpdateFrame import FirmwareUpdateFrame

 File "D:\sdk\zwave\zip\pyzip\pyzip\FirmwareUpdateFrame.py",line 10, in <modul

e>

   from pyzwave.zip.ZIPFirmware import ZW_Firmware, Waiter

 File "D:\sdk\zwave\zip\pyzip\pyzwave\zip\ZIPFirmware.py", line8, in <module>

   import pyzwave.zip.ZIPClient

 File "D:\sdk\zwave\zip\pyzip\pyzwave\zip\ZIPClient.py", line18, in <module>

   import dtls_client

 File "D:\sdk\zwave\zip\pyzip\pyzwave\zip\dtls_client.py", line2, in <module>

   import ssl,dtls,socket,sys

 File "D:\sdk\zwave\zip\pyzip\dtls\__init__.py", line 61, in<module>

   from patch import do_patch

 File "D:\sdk\zwave\zip\pyzip\dtls\patch.py", line 39, in<module>

   from sslconnection import SSLConnection, PROTOCOL_DTLSv1, CERT_NONE

 File "D:\sdk\zwave\zip\pyzip\dtls\sslconnection.py", line 58,in <module>

   from x509 import _X509, decode_cert

 File "D:\sdk\zwave\zip\pyzip\dtls\x509.py", line 34, in<module>

   from openssl import *

 File "D:\sdk\zwave\zip\pyzip\dtls\openssl.py", line 79, in<module>

   libcrypto = CDLL(release_cryptodll_path)

 File "C:\Python27\lib\ctypes\__init__.py", line 365, in__init__

   self._handle = _dlopen(self._name, mode)

WindowsError: [Error 126]

 

D:\sdk\zwave\zip\pyzip>




【code】

首先我们找到"D:\sdk\zwave\zip\pyzip\dtls\openssl.py"这个文件的line 79,看看code是什么原因引起的

#
# Library loading
#
if sys.platform.startswith('win'):
    #dll_path = path.abspath(path.dirname(__file__))
    if (platform.architecture()[0] == "64bit"):
         dll_path = "C:\OpenSSL-Win64"
    else:
         dll_path = "C:\OpenSSL-Win32"
    debug_cryptodll_path = path.join(dll_path, "cygcrypto-1.0.0.dll")
    debug_ssldll_path = path.join(dll_path, "cygssl-1.0.0.dll")
    release_cryptodll_path = path.join(dll_path, "libeay32.dll")
    release_ssldll_path = path.join(dll_path, "ssleay32.dll")

    if path.exists(path.join(dll_path, "use_debug_openssl")) and \
      path.exists(debug_cryptodll_path) and \
      path.exists(debug_ssldll_path):
        libcrypto = CDLL(debug_cryptodll_path)
        libssl = CDLL(debug_ssldll_path)
    else:
        # If these don't exist, then let the exception propagate
        libcrypto = CDLL(release_cryptodll_path)
        libssl = CDLL(release_ssldll_path)
elif sys.platform.startswith('darwin'):
    libcrypto = CDLL("/opt/local/lib/libcrypto.1.0.0.dylib")
    libssl = CDLL("/opt/local/lib/libssl.1.0.0.dylib")
else:
    libcrypto = CDLL("libcrypto.so.1.0.0")
    libssl = CDLL("libssl.so.1.0.0")


那么就是在"C:\OpenSSL-Win64"这个文件夹找不到libeay32.dll和ssleay32.dll这两个动态库;

 install DTLS

python setup.py install 

时,它安装的目录可能是C:\Python27\Lib\site-packages\dtls; 并不存在"C:\OpenSSL-Win64"这个文件夹。


【解决】

根据上面的code,创建"C:\OpenSSL-Win64"这个文件夹,并找到libeay32.dll和ssleay32.dll,将它们拷贝过去。再运行就OK了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值