首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django 1.11.7-Django压缩器-参数5:<class 'TypeError'>:预期的LP_OVERLAPPED实例而不是指向重叠的指针

Django 1.11.7-Django压缩器-参数5:<class 'TypeError'>:预期的LP_OVERLAPPED实例而不是指向重叠的指针
EN

Stack Overflow用户
提问于 2018-05-14 19:49:00
回答 1查看 623关注 0票数 7

我正试图在我的Windows 10框上安装和运行一个现有的Django 1.11.7 (Python3.5)项目。设置好环境之后,我现在在运行应用程序之后看到主页,但是我访问的任何内部页面都会出现以下错误:

argument 5: <class 'TypeError'>: expected LP_OVERLAPPED instance instead of pointer to OVERLAPPED

我从compress.py (Django压缩程序)调用一些压缩的CSS文件,到django.core内部的一些win32文件锁定代码,特别是这一行:https://github.com/django/django/blob/master/django/core/files/locks.py#L86 (下面的snip中的UnlockFileEx)。

代码语言:javascript
运行
复制
class OVERLAPPED(Structure):
    _anonymous_ = ['_offset_union']
    _fields_ = [
        ('Internal', ULONG_PTR),
        ('InternalHigh', ULONG_PTR),
        ('_offset_union', _OFFSET_UNION),
        ('hEvent', HANDLE)]

LPOVERLAPPED = POINTER(OVERLAPPED)
....
def lock(f, flags):
    hfile = msvcrt.get_osfhandle(_fd(f))
    overlapped = OVERLAPPED()
    ret = LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, byref(overlapped))
    return bool(ret)

def unlock(f):
    hfile = msvcrt.get_osfhandle(_fd(f))
    overlapped = OVERLAPPED()
    ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped))
    return bool(ret)

奇怪的是,在主页上调用LockFileEx和UnlockFileEx方法都没有错误。在成功和不成功的电话中检查当地人都没有发现任何结果。

堆栈跟踪,以防有帮助(更高的堆栈编辑):

代码语言:javascript
运行
复制
  File "C:\x\env\lib\site-packages\compressor\templatetags\compress.py", line 127, in render
    return self.render_compressed(context, self.kind, self.mode, forced=forced)
  File "C:\x\env\lib\site-packages\compressor\templatetags\compress.py", line 103, in render_compressed
    rendered_output = compressor.output(mode, forced=forced)
  File "C:\x\env\lib\site-packages\compressor\css.py", line 49, in output
    ret.append(subnode.output(*args, **kwargs))
  File "C:\x\env\lib\site-packages\compressor\css.py", line 51, in output
    return super(CssCompressor, self).output(*args, **kwargs)
  File "C:\x\env\lib\site-packages\compressor\base.py", line 292, in output
    output = '\n'.join(self.filter_input(forced))
  File "C:\x\env\lib\site-packages\compressor\base.py", line 232, in filter_input
    for hunk in self.hunks(forced):
  File "C:\x\env\lib\site-packages\compressor\base.py", line 215, in hunks
    basename=basename)
  File "C:\x\env\lib\site-packages\compressor\base.py", line 307, in handle_output
    return output_func(mode, content, forced, basename)
  File "C:\x\env\lib\site-packages\compressor\base.py", line 319, in output_file
    self.storage.save(new_filepath, ContentFile(content.encode(self.charset)))
  File "C:\x\env\lib\site-packages\django\core\files\storage.py", line 54, in save
    return self._save(name, content)
  File "C:\x\env\lib\site-packages\django\core\files\storage.py", line 357, in _save
    locks.unlock(fd)
  File "C:\x\env\lib\site-packages\django\core\files\locks.py", line 86, in unlock
    ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped))

使用锁定/解锁的文件似乎是静态CSS文件。JS和LESS都是抛出上述异常的。该项目似乎同时为CSS和JS过滤器使用yuglify,如果这有帮助的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-14 21:37:54

在我的例子中,这是由于与youtube-dl包的冲突,该包具有与django-压缩程序包同名的类、变量和方法。我能够通过在这两种情况下“侵入”各种令牌的名称来确认这一点,从而导致了一个错误的argument 5: <class 'TypeError'>: expected LP_OVERLAPPED2 instance instead of pointer to OVERLAPPED3

目前,我已经从我的环境中删除了youtube-dl包,作为在本地开发环境中运行该程序的临时解决方案。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50337960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档