【发布时间】:2015-04-30 18:25:15
【问题描述】:
我似乎无法找到造成这种情况的根本原因。我不知道是 pyinstaller、pip 问题、requests 模块还是其他问题,因为什么都无法最终消除。
我在 python 中编写了一个脚本,当我们必须部署一个新单元时,它可以为我们的企业网络正确配置一个新的硬件 sonicwall。它在内存中配置适当的 .exp 文件,使用默认凭据登录到 sonicwall 设备,通过多部分数据表单导入文件,重新启动 sonicwall,然后再次登录并正确更改共享密钥。出于安全原因,我不能在这里发布代码,但我可以用一个更简单的例子来解释这个问题。之前的代码是使用 urllib 和 urllib2 来处理 http 请求,但是后来我不得不重新编写脚本以包含 csrfTokens 时发现了 requests 模块。
长话短说,当被 python 解释器调用时,脚本的效果非常好。但是,当尝试使用 pyinstaller 编译它时,由于我已切换到请求而不是 urllibs,因此出现了一系列错误。
更多背景:
Windows 7 - Python2.7.9
pip 6.0.8 from C:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg (python 2.7)
pip freeze output:
pyinstaller==2.1.1.dev0
pywin32==219
requests==2.5.3
作为一个例子,我会给你一些代码,一个简单的谷歌请求。
#!/usr/bin/python
import requests
r = requests.get('https://google.com')
print(r.text)
当我从 python 调用文件时,上面的代码适用于一个简单的请求,但是当我编译它时,我得到了这个:
(编辑在粘贴输出时遇到问题,这里是 pastebin) pastebin
它创建了一个 Windows 可执行文件,但是当我尝试运行它时出现以下错误:
注意我确实安装了 ms c++ 2008 可再发行组件以帮助清除 msvcr90.dll,但我仍然收到上述 requests.packages.chardet.sys 错误。
我已经尝试了所有我能想到的方法,安装 chardet,安装 chardet2,安装 cchardet,强制早期版本的 pyinstaller 和增量请求。报废 pip 并手动安装 pyinstaler 和请求。我对要尝试的事情束手无策,我并没有完全理解这里的错误。 requests.packages.chardet 存在于系统中。我的 Windows PATH 中也有 C:\Python27,因为我可以从任何目录调用 python。
如果您需要更多信息,请告诉我。我试图尽可能彻底地处理错误以及我安装的内容,但如果需要,我可以提供更多。
ALSO 仅当我在导入请求时尝试编译时才会出现此问题。创建测试脚本、beautifulsoup、urllib/2 等都会编译出一个可以正常运行的有效 windows exe。
【问题讨论】:
标签: python python-2.7 python-requests pyinstaller