首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >py2exe "requests“模块丢失

py2exe "requests“模块丢失
EN

Stack Overflow用户
提问于 2015-08-22 21:41:54
回答 1查看 1.9K关注 0票数 0

我不知道为什么我不能导入包requests

如果我执行需要requests库的脚本,它显然会崩溃。

Web请求库:

http://docs.python-requests.org/en/latest/

版本Py2exe 0.9.2.2

版本Python 3.4.3

我尝试过像-i requests一样使用py2exe的其他选项,我甚至尝试过使用setup.py表单,但是我不能让它工作。

代码语言:javascript
复制
py -3.4 -m py2exe.build_exe script.py --bundle-files 3

  24 missing Modules
  ------------------
? Cookie                              imported from requests.compat
? OpenSSL                             imported from requests.packages.urllib3.contrib.pyopenssl
? Queue                               imported from requests.packages.urllib3.connectionpool
? _abcoll                             imported from requests.packages.urllib3.packages.ordered_dict
? backports                           imported from requests.packages.urllib3.packages.ssl_match_hostname
? certifi                             imported from requests.certs
? cookielib                           imported from requests.compat
? dummy_thread                        imported from requests.packages.urllib3.packages.ordered_dict
? ndg                                 imported from requests.packages.urllib3.contrib.pyopenssl
? netbios                             imported from uuid
? pyasn1                              imported from requests.packages.urllib3.contrib.pyopenssl
? readline                            imported from cmd, code, pdb
? simplejson                          imported from requests.compat
? thread                              imported from requests.packages.urllib3.packages.ordered_dict
? urllib.getproxies                   imported from requests.compat
? urllib.proxy_bypass                 imported from requests.compat
? urllib.quote                        imported from requests.compat
? urllib.quote_plus                   imported from requests.compat
? urllib.unquote                      imported from requests.compat
? urllib.unquote_plus                 imported from requests.compat
? urllib.urlencode                    imported from requests.compat, requests.packages.urllib3.request
? win32api                            imported from platform
? win32con                            imported from platform
? win32wnet                           imported from uuid
Building 'dist\script.exe'.
EN

回答 1

Stack Overflow用户

发布于 2016-03-10 01:50:22

如果您的程序崩溃并显示“FileNotFoundError:errno2No No file or directory”,问题不是缺少模块,而是缺少SSL验证所需的文件“cacert.pem”。

有人解释了如何在这个线程中解决这个问题-- Requests library: missing file after cx_freeze

我从py2exe切换到cx_freeze,因为我发现在cx_freeze中处理这个丢失文件的问题更容易。

下面是我的完整cx_freeze代码,展示了如何完全实现另一个StackOverflow线程中描述的解决方案,它将解决这个“cacert.pem”问题。我确信在py2exe中解决方案是相同的,您只需要找到与cx_freeze 'include_files‘等效的py2exe。也许知道的人可以插手帮忙。

这是setup.py文件-

代码语言:javascript
复制
from cx_Freeze import setup, Executable
import sys
import requests.certs

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]}

setup(name='MyProgramName',
      version='1.0',
      description='ProgramDescription',
      options={"build_exe":build_exe_options},
      executables=[Executable('myScript.py',base=base)])

现在,在脚本中向SSL服务器发出请求的任何地方,都必须添加一个'verify‘参数,并将其定向到'cacert.pem’文件。

代码语言:javascript
复制
r = requests.post('https://wherever.com', verify='cacert.pem')

或者如果您不想要SSL验证

代码语言:javascript
复制
r = requests.post('https://wherever.com', verify=False)

问题是“verify”在默认情况下设置为“True”,因此它会查找不存在的cacert.pem文件。

我将.pem文件放在与可执行文件相同的目录中,并且能够直接链接到它,verify='cacert.pem‘。如果这对你不起作用,或者你想把它放在另一个目录中,有一些解决方案可以在另一个StackOverflow线程中获得你的exe文件的cwd。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32156802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档