【问题标题】:Running Python file from command line does not load modules从命令行运行 Python 文件不会加载模块
【发布时间】:2018-03-06 15:34:57
【问题描述】:

我有一个包含以下模块的 Python 脚本:

from tkinter import *
from tkinter import ttk
from tkinter import filedialog

当我通过按 F5 在 IDLE 中运行代码时,脚本运行良好并启动我的应用程序。

但是,当我转到命令提示符并键入

python ScannerApp.py

我收到以下错误:

File "tkinterTest.py", line 1, in <module>
from tkinter import *
ImportError: No module named tkinter

如何消除此错误?最终目标是将这个脚本变成 .exe。

一个想法是python没有添加到我在Path下的环境变量中,它是作为它自己的变量添加的。这会导致问题吗?

我的问题与 Tkinter 和 tkinter 之间的区别无关。我的问题是为什么当我通过命令行运行代码时出现错误。问题恰好是我的环境变量 python 被设置为运行 python 2.7 而不是必要的 python 3.6(它使用 tkinter)。

【问题讨论】:

  • 可能idle和命令行是不同的环境
  • 我如何让它们相同?
  • 您使用的是 Windows 吗?
  • 是的,我使用的是 windows。
  • 该问题是交叉兼容性问题。我的命令行变量 python 使用的是 python 2.7,而它应该使用的是 python 3.6。将环境变量更改为 python 3.6 解决了我的问题。谢谢

标签: python tkinter command-line


【解决方案1】:

尝试添加此代码以实现交叉兼容性,而不是之前的导入代码。:(希望这就是问题所在)

try:
    from tkinter import *
    from tkinter import ttk,filedialog
except:
    from Tkinter import *
    from Tkinter import ttk,filedialog

【讨论】:

  • 交叉兼容性是问题,但这个解决方案并没有解决我的问题。我能够通过将环境变量 python 更改为运行 3.6 而不是 2.7 来解决。
  • 这真是个坏主意,而且我的代码中没有发现任何缺陷,它应该可以完美运行。
  • 这可能是 ttk 可能不兼容或不存在于 Python 2 中,否则我觉得没问题。
  • 我可以告诉你,事实并非如此。我的解决方案解决了我的问题,因为这是一个只能在一台计算机上使用的应用程序,我不明白为什么我需要考虑我不会使用的 python 版本。
  • 上述代码的问题在于python-2.x 中的ttkfildialog 都不是tkinter 的子模块。取而代之的是 separate ttktkFileDialog 模块,它们实际上应该与 tkinter 的 python-3.x 相同。 TL;DR:将 from Tkinter import ttk,filedialog 替换为 import ttk; import tkFileDialog as filedialog 以获得所需的结果。
【解决方案2】:

我的问题的解决方案是更改环境变量 python 以运行版本 3.6 而不是 2.7。 这个问题是一个交叉兼容性问题,我发现更改变量比尝试根据特定版本同时尝试 Tkinter 和 tkinter 模块更容易。

【讨论】:

  • 在我看来,这个解决方案是针对我的特定问题的解决方案。我解释了我的问题是什么,如果有人有同样的问题,这将是一个解决方案。我从不声称这是解决每个 tkinter 或 Tkinter 问题的解决方案。
  • 你知道,菜鸟的工作方式并不是这样,我一直是菜鸟,我知道如果你的答案是一个公认的答案,我会不假思索地破坏那个环境变量。
  • 我只用过 python 3.6。同样,这个解决方案对我有用。你不喜欢它不是我的问题。继续投反对票。
【解决方案3】:

您的问题可能是 python3 不使用 Tkinter(大写 T)而是 tkinter。那就是如果你当然使用 pyhton3 ^^

https://stackoverflow.com/a/17843652/9368855

【讨论】:

  • 我认为这不是问题,因为当我通过 IDLE 运行脚本时它可以工作。仅当我通过命令行运行脚本时才会出现此问题。
  • 如果我没记错的话,你把它倒过来了,这提供了一个解释,但不是一个解决方案。
  • 另外,如果答案是直接链接,请投票/标记以作为重复项关闭,而不是提供低于标准的答案。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多