“Windows错误:提供程序DLL无法正确初始化”导入冻结的wxpython应用程序中的cgi模块

时间:2014-02-14 23:00:27

标签: python wxpython cgi

我有一个冻结的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'? '随机'?

Screenshot

3 个答案:

答案 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/issue1384175http://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中的某个地方,可能是由于某些缺失或不正确的环境变量引起的。特别是如果环境太长,就会发生这种情况。

  • 如果从shell启动Python,请打开一个新shell并再试一次。如果问题仍然存在,请检查是否存在异常多的环境变量
  • 如果要从其他进程启动Python,请检查进程环境是否设置正确。我发现Apache的CGI模块运行的进程通常不是这种情况。

如果您将Python作为CGI流程启动,那么您可能需要考虑更好的替代方案,例如mod_wsgi。