Python 冻结时间'ignore'不';t似乎无法在更复杂的设置中工作(Django&x2B;S3/boto)

Python 冻结时间'ignore'不';t似乎无法在更复杂的设置中工作(Django&x2B;S3/boto),python,django,amazon-s3,python-import,freezegun,Python,Django,Amazon S3,Python Import,Freezegun,我使用Django和S3作为文件存储(使用boto3/botocorelibs)。我有一个“管理”命令,可以创建一些Django实例-我使用的是冷冻枪,所以这些实例似乎是在过去创建的。但是,其中一些模型包含保存到S3的文件,这会引发一些异常: ... File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 314, in _api_call return se

我使用Django和S3作为文件存储(使用boto3/botocorelibs)。我有一个“管理”命令,可以创建一些Django实例-我使用的是冷冻枪,所以这些实例似乎是在过去创建的。但是,其中一些模型包含保存到S3的文件,这会引发一些异常:

...
  File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 314, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 612, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (RequestTimeTooSkewed) when calling the ListObjectsV2 operation: The difference between the request time and the current time is too large.
这是由于
botocore.auth
模块中的一些身份验证代码检查时间差造成的。我尝试使用
ignore
参数(
freeze\u time(datetime\u过去,ignore=['botocore'])
来解决这个问题,但是没有帮助,
botocore.auth
仍然使用
FakeDatetime
(我使用带断点的调试器来查明问题)

我试图用一个简单的可复制的例子来重现这个问题,因此我提出了以下建议:

#test.py
从冷冻枪导入冷冻时间
从日期时间导入日期时间
在之间导入内容

导入测试时间——根据您的描述,我不清楚您在这种情况下使用冰枪的目的。我怀疑冰枪不是这个工作的合适工具,但正如前面提到的,我不清楚你想达到什么目的。您是否试图在S3中创建具有过去时间戳的对象?@Dunedan我添加了一个说明-我只希望模型本身以及它们包含的日期时间字段使用假时间保存。为什么不简单地使用
日期时间字段的
默认值
参数来设置静态时间,而不是使用冷冻枪。这可能看起来像
date\u created=models.DateTimeField(默认值=datetime.datetime(2020,1,1,1,1,1,1))
从您的描述中,我不清楚您在这个上下文中使用冰枪的目的。我怀疑冰枪不是这个工作的合适工具,但正如前面提到的,我不清楚你想达到什么目的。您是否试图在S3中创建具有过去时间戳的对象?@Dunedan我添加了一个说明-我只希望模型本身以及它们包含的日期时间字段使用假时间保存。为什么不简单地使用
日期时间字段的
默认值
参数来设置静态时间,而不是使用冷冻枪。这可能看起来像
date\u created=models.DateTimeField(默认值=datetime.datetime(2020,1,1,1,1,1,1))