我有一个冻结的wxpython应用程序的用户获取附加的屏幕截图。
错误消息是“Windows错误:提供程序DLL无法正确初始化”
从暂停的视频中截取的屏幕截图是我从他们那里得到此错误消息的唯一方法,因为整个事情立即消失(包括创建此DOS窗口以捕获stderr,此消息出现在哪里)。 IE python在它真正开始之前就已经死了。
回溯指向我在controller.py第14行的代码。
此行
import cgi
由于某种原因,似乎cgi在导入期间调用随机(为什么会这样?)并且出于某种原因,这是因为某些DLL原因而失败。
任何线索?
注1:此应用程序适用于数百个其他Windows和Mac用户。所以就好像我出于某种原因没有提供不在这个用户机器上的东西。
注2:使用bbfreeze创建可执行文件,使用以下配置:
f = Freezer(distdir = distdir,
includes = ['wx.lib.pubsub.core.kwargs.*',
'wx.lib.pubsub.core.*',
'dbhash',
'platform']
)
我不确定我还会在这里放什么。 'CGI'? '随机'?
答案 0 :(得分:5)
对我来说,确切的错误信息是:
WindowsError:[错误-2146893795]提供程序DLL无法正确初始化
带有如下的痕迹:
File "C:\Dev\Python\python-2.7.11\lib\tempfile.py", line 35, in <module>
from random import Random as _Random
File "C:\Dev\Python\python-2.7.11\lib\random.py", line 885, in <module>
_inst = Random()
File "C:\Dev\Python\python-2.7.11\lib\random.py", line 97, in __init__
self.seed(x)
File "C:\Dev\Python\python-2.7.11\lib\random.py", line 113, in seed
a = long(_hexlify(_urandom(2500)), 16)
WindowsError: [Error -2146893795] Provider DLL failed to initialize correctly
为我解决的是来自http://bugs.python.org/issue1384175(http://bugs.python.org/msg248947)的评论,说明如下:
This happened at a call to `os.urandom` for me.
This was in a subprocess.
The bug for me was that I called `_subprocess.CreateProcess`
with an `env_mapper = {'foo': 'bar'}`. The fix:
env_mapper = os.environ.copy()
env_mapper.update({'foo': 'bar'})
答案 1 :(得分:2)
我认为最小的解决方案是在Python子流程中包含SYSTEMROOT
环境变量。
我在尝试加载os.urandom
时遇到了问题:
self._authkey = AuthenticationString(os.urandom(32))
WindowsError: [Error -2146893795] Provider DLL failed to initialize correctly
事实证明,Windows上的_PyOS_URandom
依赖于要设置的SYSTEMROOT
环境。有关详细说明,请参阅:http://bugs.python.org/issue1384175#msg248951
答案 2 :(得分:1)
这似乎发生在os.urandom中的某个地方,可能是由于某些缺失或不正确的环境变量引起的。特别是如果环境太长,就会发生这种情况。
如果您将Python作为CGI流程启动,那么您可能需要考虑更好的替代方案,例如mod_wsgi。