按照官网上的说明安装并运行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了