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

Gre*_*ade 6 python cgi wxpython

我有一个冻结的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']
            )
Run Code Online (Sandbox Code Playgroud)

我不确定我还会在这里放什么.'CGI'?'随机'?

截图

Fab*_*zny 6

对我来说,确切的错误信息是:

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
Run Code Online (Sandbox Code Playgroud)

什么解决它,我是从一个评论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'})
Run Code Online (Sandbox Code Playgroud)


Flo*_*ter 1

这似乎发生在 os.urandom 内部的某个地方,可能是由一些缺失或不正确的环境变量引起的。特别是如果环境太长,就会发生这种情况。

  • 如果您从 shell 启动 Python,请打开一个新 shell 并重试。如果问题依然存在,请检查环境变量是否异常多
  • 如果您从另一个进程启动Python,请检查进程环境是否设置正确。我发现对于 Apache 的 CGI 模块运行的进程来说,情况通常并非如此。

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