[英]How to compile multiple python files into single .exe file using pyinstaller
我在 python 中创建了一个 GUI(使用 Tkinter),它使用 os.system('python_file.py') 从 GUI 单击一个按钮运行 python 文件。 我想通过将 Tkinter 文件保留为主文件,使用 pyinstaller 将所有这些 python 文件捆绑到单个 .exe 文件中。
我通过在命令行中执行以下操作创建了 .exe 文件:
pyinstaller --debug --onefile --noupx tkinter_app.py
目前我的 .spec 文件如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['tkinter_app.py'],pathex=['C:\\test'],binaries=[],datas=[],
hiddenimports=[],hookspath=[],runtime_hooks=[],excludes=[], win_no_prefer_redirects=False,
win_private_assemblies=False, cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name='tkinter_app', debug=True, strip=False, upx=False,console=True )
我不确定如何在上面的 .spec 文件中包含其他 python 文件,以便整个应用程序正常工作。 有人可以帮忙吗?
假设您有两个文件: "my_main.py"和"my_functions.py" 。 假设“my_main.py”从“my_functions.py”导入方法
执行以下命令:
pyinstaller --onefile my_main.py my_functions.py
生成的单个可执行文件“my_main.exe”将在当前工作目录的“dist”文件夹下创建。
Linux/Windows 的相同进程。 对于两个以上的python文件,只需在空格分隔后包含一个。
pyinstaller --onefile my_main.py my_functions.py file3.py file4.py
最好的方法是使用数组数据
例如像这样:
a = Analysis(['.\\main.py'],
pathex=['.'],
binaries=None,
datas=[ ('.\\Ressources\\i18n', 'i18n'),
('.\\Ressources\\file1.py', '.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
注意:确保将其放在正确的相对路径中,以便您的程序能够访问它
编辑:鉴于您的错误消息,问题不在于使用 PyInstaller 打包,而在于 os.system 命令。
os.system 相当于打开一个 DOS 命令窗口并输入你的命令python_file.py
要访问您的 python 文件,您必须知道:
给定文件的完整路径,os.system 可用于启动 python: os.system("python " + os.path.join(sys._MEIPASS, "python_file.py"))
但是要小心,这只有在系统上安装了 python(并包含在 syspath 中)和 exe 时才有效。 直接执行你的 python 文件会发送异常。
未完全验证,可能对您的参考有用。
背景:我在 Win 和 Mac 中多次使用PyInstaller
。
回答你的问题:
pyinstaller --onefile tkinter_app.py python_file.py
额外说明:如果main.py
导入some_other.py
(和/或其他一些库,例如上面有人提到的numpy
、 pandas
等...,那么PyInstaller
可以自动识别它,不需要添加--onefile
和其他 py文件,只需要
pyinstaller main.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.