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

时间:2017-07-19 07:02:08

标签: python python-2.7 tkinter 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文件,以便整个应用程序正常工作。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

最好的方法是使用数组数据

例如:

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文件将发送异常。

答案 1 :(得分:0)

假设您有两个文件:“ 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

答案 2 :(得分:0)

  • 未完全验证,可能对您有用。

  • 背景:我在Win和Mac中已经使用PyInstaller了几次。

  • 回答您的问题:

    • pyinstaller --onefile tkinter_app.py python_file.py
  • 其他说明:如果main.py导入some_other.py(和/或其他一些库,例如上面提到的numpypandas等... ,则PyInstaller可以自动识别它,不需要添加--onefile和其他py文件,只需

    • pyinstaller main.py
  • 如果需要详细说明,请参阅official doc