【发布时间】:2016-12-12 21:34:00
【问题描述】:
导入整个包在 IDLE 中有效,但在 shell 中无效。以下在 IDLE 中可以正常工作:
import tkinter as tk
tk.filedialog.askopenfilename()
在 shell 中,我得到这个错误:
AttributeError: 'module' object has no attribute 'filedialog'
我知道我必须 import tkinter.filedialog 才能在 shell 中完成这项工作。
为什么IDLE和shell有区别?我怎样才能让 IDLE 像 shell 一样?让脚本在 IDLE 中运行而在 shell 中失败可能会令人沮丧。
我正在使用 Python 3.4。
【问题讨论】:
-
@TerryJanReedy 是的,那篇文章描述了一个类似的问题。脚本环境不应该与 IDLE 用于其自身需求的任何东西隔离开来吗?另外,如果我在 IDLE 中输入
tkinter或tk,它会显示name 'tkinter' is not defined或name 'tk' is not defined,如果其他帖子中的解释正确,则应该定义它。 -
我撤回了关闭请求,因为您问的不是“为什么”,而是“如何解决”。我在下面回答了。是的,脚本环境应该尽可能地隔离。这就是在单独的进程中执行代码的原因。 IDLE 文档有一个 3.2 部分。 IDLE - 列出一些不可避免的控制台差异。我仍在努力将 sys.modules 中的额外模块数量减少到最低限度。 (bugs.python.org/issue27534)。对我来说,当前的减少将 run.py 中的导入时间减少了 45%。
标签: python python-import python-idle python-packaging