如何为诸如datetim之类的stdlib模块启用纯Python模块而不是C加速版本

2024-05-14 10:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

一些stdlib模块(如datetimedecimalio)同时具有C和纯Python实现,例如,请参见PEP 399 -- Pure Python/C Accelerator Module Compatibility Requirements。你知道吗

最好禁用C加速版本。你知道吗

对于decimalio模块,我可以直接导入_pydecimal_pyio模块。如何访问纯Pythondatetime实现?你知道吗


Tags: 模块io版本datetimepurepeprequirementspyio
1条回答
网友
1楼 · 发布于 2024-05-14 10:40:00

C加速版本(_datetime)是在datetime.py中使用from _datetime import *启用的,因此如果datetime模块已在前面导入,则足以导致ImportError并重新加载该模块:

import importlib
import sys

sys.modules['_datetime'] = None # cause ImportError
datetime = importlib.reload(importlib.import_module('datetime')) 

测试:

>>> datetime.timedelta(1<<30)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/datetime.py", line 430, in __new__
    raise OverflowError("timedelta # of days is too large: %d" % d)
OverflowError: timedelta # of days is too large: 1073741824

回溯显示使用了纯Python版本。你知道吗

相关问题 更多 >

    热门问题