By 鬼猫猫 http://www.cnblogs.com/muyr/
背景
使用pyinstaller打包跟shotgun有关的程序后,在自己电脑上运行都OK,但是编译好的exe在其他人的电脑上运行失败(就是连接Shogun那一步出错),错误内容为:
Traceback (most recent call last):
File "<string>", line 286, in slotSetting
File "<string>", line 28, in connectShotgun
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 307, in __init__
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 326, in server_caps
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 353, in info
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 1418, in _call_rpc
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 1514, in _make_call
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.shotgun", line 1532, in _http_request
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.lib.httplib2", line 1441, in request
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.lib.httplib2", line 1193, in _request
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.lib.httplib2", line 1128, in _conn_request
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.lib.httplib2", line 895, in connect
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzshotgun_api3.lib.httplib2", line 77, in _ssl_wrap_socket
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzssl", line 381, in wrap_socket
File "d:mu_refpyinstaller imelogsuild imelogsout00-PYZ.pyzssl", line 141, in __init__
ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
分析
出错原因:https://github.com/kennethreitz/requests/issues/557
解决方法:http://stackoverflow.com/questions/14486631/pyinstaller-compiled-file-has-ssl-issue-error-185090050
出错的大概原因是:pyinstaller可能没有将httplib2中的cacert.txt
文件打包进来,导致编译完成的exe运行时加载失败。
解决方法
在开发过程,不需要修改什么,该怎么弄怎么弄。
在打包之前,需要修改一点shotgun_api3,比如我的是在C:Python27Libsite-packagesshotgun_api3-3.0.14-py2.7.eggshotgun_api3libhttplib2
文件夹里,中的__init__.py
第180和181行,将
CA_CERTS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "cacerts.txt")
改为
CA_CERTS = os.path.join(os.path.dirname(os.path.abspath(sys.executable)), "cacerts.txt")
然后再执行pyinstaller打包过程,完成之后,将httplib2文件夹里面的cacert.txt
拷贝一份到打包好的.exe相同层级即可。
注意:打包完了,记得将init.py改回来啊,别影响了(其他)项目的开发
Powered by Sublog