繁体   English   中英

如何使用pyinstaller将多个python文件编译成单个.exe文件

[英]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 文件,您必须知道:

  • PyInstaller 将您打包的文件解压到您可以在 sys._MEIPASS 中访问的临时文件夹中(仅适用于 .exe)
  • 给定文件的完整路径,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 (和/或其他一些库,例如上面有人提到的numpypandas等...,那么PyInstaller可以自动识别它,不需要添加--onefile和其他 py文件,只需要

    • pyinstaller main.py
  • 如果需要详细解释,您应该参考官方文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM