Python。 from dateutil.relativedelta import * 在 shell 中有效,但在脚本中无效

Python. from dateutil.relativedelta import * works in shell but not in a script

当我去运行

from datetime import *; from dateutil.relativedelta import *

从 python 脚本中我得到一个错误,这对我来说似乎表明模块本身有问题。

Traceback (most recent call last):
  File "C:\Users\Tom\Documents\datetime.py", line 1, in <module>
    from datetime import *
  File "C:\Users\Tom\Documents\datetime.py", line 2, in <module>
    from dateutil.relativedelta import *
  File "C:\Users\Tom\AppData\Local\Programs\Python\Python35\lib\site-packages\python_dateutil-2.0-py3.5.egg\dateutil\relativedelta.py", line 11, in <module>
    import calendar
  File "C:\Users\Tom\AppData\Local\Programs\Python\Python35\lib\calendar.py", line 47, in <module>
    class _localized_month:
  File "C:\Users\Tom\AppData\Local\Programs\Python\Python35\lib\calendar.py", line 49, in _localized_month
    _months = [datetime.date(2001, i+1, 1).strftime for i in range(12)]
  File "C:\Users\Tom\AppData\Local\Programs\Python\Python35\lib\calendar.py", line 49, in <listcomp>
    _months = [datetime.date(2001, i+1, 1).strftime for i in range(12)]
AttributeError: module 'datetime' has no attribute 'date'

然而,当我在 python shell 中使用完全相同的语句时,不会发生这种情况,如果在 shell 中使用,它会完美地工作。

我确实发现它与 dateutil 的 relativedelta 部分直接相关,因为

from dateutil import *

工作正常。

我已经尝试重新安装 dateutil,但仅此而已。

运行 python 3.5.1 和 dateutil 2.0 如果重要的话。

编辑:抱歉,我是个白痴,我的文件名为 datetime.py,这就是导致问题的原因。

我相信这是源文件名。我猜当 python 解释器试图找到 datetime 模块时,它会首先搜索本地目录,而 datetime 模块将是您的源文件,而不是 datetime 全局包。 this post explains more

一旦您将文件重命名为 dd.py 而不是 "C:\Users\Tom\Documents\datetime.py",它应该会成功。