我似乎找不到这个的根本原因.我不知道它是pyinstaller,pip问题,请求模块还是别的东西,因为没有什么可以最终消除.
我在python中编写了一个脚本,当我们必须部署一个新单元时,它为我们的企业网络正确配置了一个新的硬件sonicwall.它在内存中配置正确的.exp文件,使用默认凭据登录到sonicwall设备,通过多部分数据表单导入文件,重新启动sonicwall,然后再次登录并正确更改共享密钥.出于安全原因,我不能在这里发布代码,但我可以用一个更简单的例子来解释这个问题.以前,代码使用urllib和urllib2来处理http请求,但是当我不得不重新编写脚本以包含csrfTokens时,我发现了请求模块.
长话短说,这个脚本在python解释器调用时效果很好.但是,当尝试使用pyinstaller编译它时,我得到了一系列错误,因为我已切换到请求而不是urllib.
更多背景:
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
Run Code Online (Sandbox Code Playgroud)
作为一个例子,我会给你一些炸弹的代码,一个简单的谷歌请求.
#!/usr/bin/python
import requests
r = requests.get('https://google.com')
print(r.text)
Run Code Online (Sandbox Code Playgroud)
当我从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.
如果您需要更多信息,请告诉我.我试图尽可能彻底地解决错误和我已安装的错误,但如果需要我可以提供更多错误.
此外, 当我在导入请求时尝试编译时,此问题似乎正在发生.创建测试脚本,beautifulsoup,urllib/2等都编译一个正常运行的有效Windows exe.