【发布时间】:2011-06-06 20:17:03
【问题描述】:
我使用 Tkinter 在 python 中编写了一个简单的 GUI 程序。我们称这个程序为“gui.py”。我的用户使用Portable Python 从 USB 密钥在 Windows 机器上运行“gui.py”;在主机上安装任何东西都是不可取的。
我希望我的用户通过双击 USB 密钥根目录中的图标来运行“gui.py”。我的用户不关心 python 是什么,如果他们不需要,他们也不想使用命令提示符。我不希望他们关心 USB 密钥分配的驱动器号。我希望它可以在 XP、Vista 和 7 上运行。
我的第一个丑陋的解决方案是在 USB 密钥的根目录中创建一个快捷方式,并将快捷方式的“目标”属性设置为“(root)\App\pythonw.exe (root)\App\ gui.py”,但我不知道如何在 Windows 快捷方式中设置相对路径,并且使用像“E:”这样的绝对路径似乎很脆弱。
我的下一个解决方案是在 USB 密钥的根目录中创建一个 .bat 脚本,如下所示:
@echo off
set basepath=%~dp0
"%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
这似乎并不关心 USB 密钥分配的驱动器号,但它确实在我的程序运行时打开了一个 DOS 窗口。实用,但丑陋。
接下来我尝试了这样的 .bat 脚本:
@echo off
set basepath=%~dp0
start "" "%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
(请参阅here 了解有趣的引用)
现在,在我的 GUI 打开之前,DOS 窗口会在屏幕上短暂闪烁。不那么丑!还是很丑。
真正的男人如何处理这个问题?从 USB 记忆棒在 Windows 机器上启动 python Tkinter GUI 最不难看的方法是什么?
编辑: 下面的所有答案都非常好(py2exe、pyinstaller、小 .exe、.wsf 脚本。) .wsf 解决方案是最简单的,所以我现在正在使用它。如果我想要一个更漂亮的图标和标准的 .exe 扩展名,我可能最终会切换到其他三个解决方案之一。谢谢大家!
【问题讨论】:
标签: python windows tkinter relative-path portable-executable