Django 1.10: django-storages on S3 error: Not naive datetime (tzinfo is already set)

Django 1.10: django-storages on S3 error: Not naive datetime (tzinfo is already set)

自升级到 Django 1.10 后,我开始遇到错误。我是 运行 Django 1.10 on Python 3.5 with django-storages==1.5.0 and boto3==1.4.0.

You have requested to collect static files at the destination
location as specified in your settings.

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/base.py", line 305, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/base.py", line 356, in execute
    output = self.handle(*args, **options)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle
    collected = self.collect()
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 124, in collect
    handler(path, prefixed_path, storage)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 337, in copy_file
    if not self.delete_file(path, prefixed_path, source_storage):
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 258, in delete_file
    target_last_modified = self.storage.get_modified_time(prefixed_path)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/files/storage.py", line 231, in get_modified_time
    return _possibly_make_aware(dt)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/files/storage.py", line 243, in _possibly_make_aware
    return timezone.make_aware(dt, tz).astimezone(timezone.utc)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/utils/timezone.py", line 368, in make_aware
    return timezone.localize(value, is_dst=is_dst)
  File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/pytz/tzinfo.py", line 304, in localize
    raise ValueError('Not naive datetime (tzinfo is already set)')
ValueError: Not naive datetime (tzinfo is already set)

USE_TZ 更改为 False 会更改错误,但我仍然不确定为什么会这样(这对我来说是 Django 代码库中的新领域):

TypeError: can't compare offset-naive and offset-aware datetimes

知道这是什么原因吗?

更新:

我正在更新我自己的答案,因为这个拉取请求现在已经被合并。要修复,只需在 requirements.txtpip install 命令中使用版本 1.5.1

django-storages==1.5.1

上下文的过时答案:

我已经想出了一个临时修复方法,应该会导致永久修复。

经过更多的调查,一位朋友发现了他们认为可能相关的这个 PR:https://github.com/jschneier/django-storages/pull/181

我注意到拉取请求的日期是我 运行 最新的 django-storages 版本 (1.5.0) 发布后两天。在我的 requirements.txt 中,我只是这样做了,指向提交的哈希值:

#django-storages==1.5.0
git+https://github.com/jschneier/django-storages.git#5f280571ee1ae93ee66ed805b53b08bfe5ab9f0c
boto3==1.4.0

然后,又是pip install --upgrade -r requirements.txt和运行collectstatic,就没有错误了!我猜这个修复将包含在 1.5.1 版本中,届时我将再次更改我的 requirements.txt