【问题标题】:can't import import datetime in script [duplicate]无法在脚本中导入导入日期时间 [重复]
【发布时间】:2013-04-05 05:25:45
【问题描述】:

我无法从 python 脚本导入日期时间,但我可以从终端命令行导入。

1)import datetime
2)From datetime import datetime

month = datetime.datetime.now().strftime("%B")
print month

这些代码行在命令行中一一输入时起作用 有什么想法吗?

我在 mac 上运行 2.7

【问题讨论】:

  • 你得到什么错误?
  • 文件 "/Users/ripple/Dropbox/Python/datetime.py",第 2 行,在 中导入日期时间文件 "/Users/ripple/Dropbox/Python/datetime.py",行4、在月份=datetime.datetime.now().strftime("%B")
  • 您将测试模块命名为 datetime.py?!这显然行不通。
  • @ch3ka 它为什么不能工作一点也不明显,除非你对模块系统非常了解并且知道一个相对晦涩的细节(搜索当前目录)。
  • 好吧,如果不是很明显,这个事件可能是学习模块系统的一个很好的动力;)

标签: python datetime python-import


【解决方案1】:

您将您的脚本命名为datetime.py,位于/Users/ripple/Dropbox/Python/datetime.py。这是导入而不是标准库模块,因为主脚本的目录是 Python 查找导入的第一个位置。

您不能为您的脚本指定与您尝试导入的模块相同的名称。重命名您的脚本。确保您还删除了/Users/ripple/Dropbox/Python/datetime.pyc 处的字节码缓存。

【讨论】:

  • 我将它重命名为 thescript.py 我得到了同样的错误。另外,我在另一个名为 NHLWeb.py 的脚本上遇到了错误。我只是使用名称 datetime.py 来显示另一个代码的错误。
  • 文件“/Users/ripple/Dropbox/Python/thescript.py”,第 1 行,在 中导入日期时间文件“/Users/ripple/Dropbox/Python/datetime.py”,行4、在 AttributeError: 'module' object has no attribute 'now'
  • @JosephLee:看看那个回溯。 /Users/ripple/Dropbox/Python/datetime.pyc 可能还存在,
  • 另外,python 文件夹不包含 python 库,只有我编写的脚本....我不知道这是否有帮助
  • @JosephLee:没关系;模块可以是脚本,脚本可以是模块。它们都是python文件。
【解决方案2】:

这是正在发生的事情:

  1. 您将文件命名为 datetime.py 用于测试
  2. 然后你在里面写了import datetime,因为那是你想尝试的模块

运行文件时会发生什么:

  1. Python 首先在本地目录中查找名为datetime 的模块
  2. 由于 Python 只能找到您的原始文件,因此它会创建一个名为 datetime.pyc 的空模块文件,因为它希望您在此基础上进行构建

幸运的是,StackOverflow 的好心人让您意识到了这个命名错误,并且您将 datetime.py 文件重命名为其他名称。但令人困惑的是,您仍然会遇到错误,并且会慢慢积累挫败感...

解决方案:

  1. 始终确保您的文件名不等于您要导入的任何 Python 模块
  2. 如果您仍然忘记,请确保删除或重命名 both 本地 .py 脚本 本地 .pyc 文件。这应该可以解决您的问题。 :)

这是一个常见错误的原因是人们喜欢在编程时测试东西。当他们这样做时,大多数人的自然倾向是制作一个与他们想要测试的东西同名的脚本。然而,这是大多数 Python 开发人员遇到的第一个陷阱。如果设计 Python 的酷人在制作他们的系统之前阅读唐纳德诺曼,这将永远不会成为问题。但事实上,我们只需要在命名文件之前调整 Python 模块系统的工作方式。注意:Python 模块系统以这种方式工作仍然是有原因的,但这并不妨碍它对初学者造成混淆。

【讨论】:

  • 呃..这尤其是咬我的东西..谢谢!
【解决方案3】:

您的第二行是覆盖python 在以后的代码中理解“日期时间”一词的含义。您应该使用

import datetime                 # the complete module
month = datetime.datetime.now().strftime("%B")

from datetime import datetime   # one part of the main module
month = datetime.now().strftime("%B")

【讨论】:

    【解决方案4】:

    在保存脚本时,请确保为它指定不同的名称(日期时间除外)并将其保存在 c:/Python34/Scripts 中;我相信这会起作用。

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多