Pyinstaller 没有模块 Tkinter

Pyinstaller No Module Tkinter

我已经使用 Tkinter 创建了一个 python 脚本,并尝试使用 Mac 和 Pyinstaller 对其进行打包。 Pyinstaller 创建了可执行文件,但是当我尝试 运行 时,它说缺少 Tkinter 模块。我意识到在 SO 上有几个类似的问题,但是 none 的解决方案对我有用。

这是我的 main.py 脚本的顶部:

#!/usr/bin/env python
import sys
import os
import traceback
import json
import time
import Tkinter

这是我的 pyinstaller 版本:

$ pyinstaller --version
3.3.dev0+483c819

我 运行 pyinstaller 使用此命令:

$ pyinstaller main.py 

这是该命令的输出:

30 INFO: PyInstaller: 3.3.dev0+483c819
30 INFO: Python: 3.4.3
34 INFO: Platform: Darwin-15.6.0-x86_64-i386-64bit
35 INFO: wrote /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/main.spec
36 INFO: UPX is not available.
38 INFO: Extending PYTHONPATH with paths
['/Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container',
 '/Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container']
38 INFO: checking Analysis
38 INFO: Building Analysis because out00-Analysis.toc is non existent
38 INFO: Initializing module dependency graph...
39 INFO: Initializing module graph hooks...
40 INFO: Analyzing base_library.zip ...
1395 INFO: Processing pre-find module path hook   distutils
2445 INFO: running Analysis out00-Analysis.toc
2452 INFO: Caching module hooks...
2454 INFO: Analyzing /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/main.py
2499 INFO: Loading module hooks...
2499 INFO: Loading module hook "hook-encodings.py"...
2553 INFO: Loading module hook "hook-pydoc.py"...
2553 INFO: Loading module hook "hook-xml.py"...
2753 INFO: Loading module hook "hook-distutils.py"...
2766 INFO: Looking for ctypes DLLs
2766 INFO: Analyzing run-time hooks ...
2773 INFO: Looking for dynamic libraries
2836 INFO: Looking for eggs
2836 INFO: Using Python library /Library/Frameworks/Python.framework/Versions/3.4/Python
2838 INFO: Warnings written to /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/build/main/warnmain.txt
2861 INFO: checking PYZ
2861 INFO: Building PYZ because out00-PYZ.toc is non existent
2861 INFO: Building PYZ (ZlibArchive) /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/build/main/out00-PYZ.pyz
3175 INFO: checking PKG
3176 INFO: Building PKG because out00-PKG.toc is non existent
3176 INFO: Building PKG (CArchive) out00-PKG.pkg
3185 INFO: Bootloader /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/PyInstaller/bootloader/Darwin-64bit/run
3185 INFO: checking EXE
3185 INFO: Building EXE because out00-EXE.toc is non existent
3185 INFO: Building EXE from out00-EXE.toc
3185 INFO: Appending archive to EXE /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/build/main/main
3187 INFO: Fixing EXE for code signing /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/build/main/main
3192 INFO: checking COLLECT
3192 INFO: Building COLLECT because out00-COLLECT.toc is non existent
3192 INFO: Building COLLECT out00-COLLECT.toc

当我 运行 可执行终端 window 打开时输出如下:

Last login: Tue Jan  3 11:35:51 on ttys004
/Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/dist/main/main ; exit;
[11:43:24][~]$ /Users/jonathanwilson/Documents/Projects/hr_digitization_tool/hr-records-management-tool-no-container/dist/main/main ; exit;
Traceback (most recent call last):
  File "main.py", line 7, in <module>
ImportError: No module named 'Tkinter'
Failed to execute script main
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

我已经尝试 运行 将 pyinstaller 命令与 --hidden-import Tkinter 结合使用,但仍然无效。我已经检查了 pyinstaller 文档部分 "When Things Go Wrong" 但仍然没有看到解决方案。

我最终找到了问题,所以我想分享一下。正如 Bryan Oakley 在问题评论中指出的那样,pyinstaller 使用 python3,我需要 python2 因为我使用的是 python2 Tkinter 版本(以及其他一些 python2 模块) .

我做了 pip uninstall pyinstallerpip3 uninstall pyinstaller 以确保我已经完全删除了 pyinstaller。然后我 pip2.7 install pyinstaller 为 python2 安装了它。 Pyinstaller 然后正确使用 python2 并加载 Tkinter 模块没有问题(我确实有一些与我的 python2 相关的问题没有被添加到我的路径,但这与这个问题无关)。