如何使用pyinstaller将多个Python文件编译为单个.exe文件

3
我已经使用Tkinter在Python中创建了一个GUI,并且通过单击GUI上的按钮来使用os.system('python_file.py')运行Python文件。我想使用pyinstaller将所有这些Python文件捆绑到一个单独的.exe文件中,同时保持Tkinter文件为主文件。
我在命令行中执行以下操作来创建.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 文件,以使整个应用程序正常运行。请问有人可以帮忙吗?

您可以按照以下步骤进行操作:https://dev59.com/iG035IYBdhLWcg3wPNZk#37140662 - Rohit Salunke
4个回答

5
假设您有两个文件:"my_main.py""my_functions.py"。假设"my_main.py""my_functions.py"中导入方法。
执行以下命令:

pyinstaller --onefile my_main.py my_functions.py

在当前工作目录的"dist"文件夹下创建生成的单个可执行文件"my_main.exe"
适用于Linux / Windows的相同过程。对于多于两个python文件,只需将它们依次包含在命令后,以空格分隔。

pyinstaller --onefile my_main.py my_functions.py file3.py file4.py


0
  • 未完全验证,可能对您有参考价值。

  • 背景:我在Win和Mac中多次使用了PyInstaller

  • 回答您的问题:

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

    • pyinstaller main.py
  • 如果需要详细说明,请参考官方文档

0
在命令提示符中打开auto-py-to-exe。
auto-py-to-exe

如果您尚未安装它,您可以使用该指令进行安装。
pip install auto-py-to-exe

然后打开它。

[auto-py-to-exe1

确认您是否需要基于控制台,然后进行转换。


0

最好的方法是使用数组datas

例如像这样:

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


感谢您的回答。尽管已经按照建议进行了更改,但我仍然无法从GUI中运行支持python文件。我收到一个类似于“'file1.py不被识别为内部或外部命令、可操作程序或批处理文件”的错误信息。规格文件:a = Analysis(['C:\Python27\Scripts\tkinter_app.py'], pathex=['.'], binaries=None, datas=[('C:\Python27\Tools\i18n','i18n'), ('C:\Python27\Scripts\file1.py','.'), ('C:\Python27\Scripts\file2.py','.'), ('C:\Python27\Scripts\file3.py','.'), ('C:\Python27\Scripts\file4.py','.'), ('C:\Python27\Scripts\file5.py','.'), ..... - sar678
这个在我的电脑上安装了Python时完美运行。我们如何在没有安装Python的计算机上运行此应用程序? - sar678
将你的 python_file.py 脚本打包成一个函数(例如叫做 python_file()),并从你的主脚本中调用它,而不是使用 os.system。 - DFE
我该如何在使用pyinstaller编译时包含Python库(如numpy、pandas)?由于我正在使用os.system运行支持Python文件,这些文件中的库未被包含在exe文件中。 - sar678
hiddenimports=[] 是关键。 - DFE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接