全局名称'_dlopen'未定义

时间:2017-09-20 10:54:50

标签: python python-2.7 google-app-engine virtualenv

我在Windows,python 2.7和virtualenv上使用GAE沙箱。 当我尝试使用Requests lib时,我收到以下错误:

global name '_dlopen' is not defined

完整筹码:

INFO     2017-09-20 13:40:20,551 module.py:821] default: "GET / HTTP/1.1" 500 
        from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer,
    File "c:\python27\Lib\ctypes\__init__.py", line 450, in <module>
        pythonapi = PyDLL(None)
    File "c:\python27\Lib\ctypes\__init__.py", line 362, in __init__
        self._handle = _dlopen(self._name, mode)
    NameError: global name '_dlopen' is not defined

Windows上的GAE确实存在加载ctypes和winreg的问题,但它现在自动在开发环境中列入白名单。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

所以我找到了导致这个问题的原因: 这是https://stackoverflow.com/a/25915535/3767514

中建议的解决方法

问题是更改os.name=None意味着ctypes无法使用正确的dll加载库。

ctypes init 第457行:

if _os.name in ("nt", "ce"):
windll = LibraryLoader(WinDLL)

所以解决方案是导入ctypes,然后在appengine_config.py中将os.name更改为None:

import os
if os.name == 'nt':
import ctypes
os.name = None