活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

PyCharm环境下将Python程序打包成exe文件的详细教程从安装配置工具到解决打包过程中遇到的各种问题让你轻松分享自己的Python应用

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-4 13:40:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 引言:为什么需要将Python程序打包成exe文件

Python作为一种高级编程语言,因其简洁易读的语法和强大的功能库支持,在开发领域广受欢迎。然而,当我们开发完成一个Python应用后,如何将其分享给没有安装Python环境的用户呢?这就需要将Python程序打包成可执行文件(exe文件)。

打包成exe文件的好处包括:

• 用户无需安装Python环境即可运行程序
• 保护源代码,避免直接暴露
• 简化部署过程,用户只需双击即可运行
• 可以包含所有依赖项,避免环境配置问题

本文将详细介绍在PyCharm环境下如何将Python程序打包成exe文件,涵盖工具安装、配置、打包过程以及常见问题的解决方案。

2. 常用的Python打包工具介绍

在开始之前,让我们先了解几种常用的Python打包工具:

2.1 PyInstaller

PyInstaller是最流行的Python打包工具之一,它的优点包括:

• 支持多平台(Windows、Linux、Mac OS)
• 自动分析依赖关系
• 可以打包成单文件或目录形式
• 支持Python 2.7和Python 3.3+
• 活跃的社区支持

2.2 cx_Freeze

cx_Freeze是另一个流行的打包工具,特点包括:

• 跨平台支持
• 可以创建安装程序
• 支持Python 2.7和Python 3.x
• 提供更多的自定义选项

2.3 Py2exe

Py2exe主要用于Windows平台,特点包括:

• 专门针对Windows平台
• 可以创建Windows服务
• 支持Python 2.7和Python 3.x

2.4 Auto-py-to-exe

Auto-py-to-exe是一个PyInstaller的图形界面版本,适合不习惯使用命令行的用户,特点包括:

• 简单的图形界面
• 基于PyInstaller
• 适合初学者

本文将以PyInstaller为主要工具进行详细介绍,因为它功能强大、社区活跃且易于使用。

3. 在PyCharm中安装和配置PyInstaller

3.1 安装PyInstaller

在PyCharm中安装PyInstaller有两种方法:

1. 打开PyCharm,右下角点击”Python Packages”或通过菜单栏”File” > “Settings” > “Project: [你的项目名]” > “Python Interpreter”
2. 在打开的包管理界面中,点击”+“号
3. 在搜索框中输入”pyinstaller”
4. 从搜索结果中选择”pyinstaller”,点击”Install Package”

1. 在PyCharm中打开终端(Terminal)
2. 输入以下命令安装PyInstaller:pip install pyinstaller
  1. pip install pyinstaller
复制代码

3.2 验证安装

安装完成后,可以通过以下命令验证PyInstaller是否安装成功:

1. 在PyCharm中打开终端(Terminal)
2. 输入以下命令:pyinstaller --version
3. 如果显示版本号,则表示安装成功
  1. pyinstaller --version
复制代码

3.3 创建示例项目

为了演示打包过程,我们先创建一个简单的Python项目:

1. 在PyCharm中创建一个新项目
2. 在项目中创建一个名为main.py的文件
3. 在main.py中输入以下代码:
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. def show_message():
  4.     messagebox.showinfo("消息", "你好,这是一个打包示例!")
  5. # 创建主窗口
  6. root = tk.Tk()
  7. root.title("打包示例")
  8. root.geometry("300x200")
  9. # 创建按钮
  10. button = tk.Button(root, text="点击我", command=show_message)
  11. button.pack(pady=50)
  12. # 运行主循环
  13. root.mainloop()
复制代码

这是一个简单的GUI应用程序,点击按钮会显示一个消息框。我们将使用这个示例来演示打包过程。

4. 使用PyInstaller打包Python程序

4.1 基本打包命令

PyInstaller提供了多种命令选项,最基本的使用方法是:

1. 在PyCharm中打开终端(Terminal)
2. 导航到你的Python脚本所在目录
3. 输入以下命令:pyinstaller main.py
  1. pyinstaller main.py
复制代码

执行后,PyInstaller会分析你的脚本,收集所有依赖项,并在当前目录下创建几个文件夹和文件:

• build文件夹:包含临时文件
• dist文件夹:包含打包后的可执行文件和依赖项
• main.spec文件:包含打包配置信息

在dist文件夹中,你会找到一个名为main的子文件夹,里面包含了所有必要的文件,包括可执行文件main.exe。

4.2 打包成单文件

如果你希望将所有内容打包成一个单独的exe文件,可以使用--onefile选项:
  1. pyinstaller --onefile main.py
复制代码

这样,在dist文件夹中会直接生成一个main.exe文件,而不是一个文件夹。这种方式的优点是分发方便,但启动速度可能会稍慢,因为每次运行时都需要解压文件。

4.3 添加自定义图标

你可以使用--icon选项为你的exe文件添加自定义图标:
  1. pyinstaller --onefile --icon=your_icon.ico main.py
复制代码

注意,图标文件必须是.ico格式。如果你有其他格式的图片,可以使用在线转换工具将其转换为.ico格式。

4.4 指定程序名称

使用--name选项可以指定生成的exe文件的名称:
  1. pyinstaller --onefile --name="MyApp" main.py
复制代码

4.5 控制控制台窗口

默认情况下,打包后的程序运行时会显示一个控制台窗口。如果你不希望显示这个窗口(例如对于GUI应用程序),可以使用--noconsole或--windowed选项:
  1. pyinstaller --onefile --windowed main.py
复制代码

4.6 添加数据文件

如果你的程序需要额外的数据文件(如图片、配置文件等),可以使用--add-data选项:
  1. pyinstaller --onefile --add-data="src/images;images" main.py
复制代码

格式为源路径;目标路径,在Windows上使用分号;作为分隔符,在Linux和Mac上使用冒号:。

4.7 隐藏导入

有时候,PyInstaller可能无法自动检测到某些动态导入的模块。你可以使用--hidden-import选项手动指定这些模块:
  1. pyinstaller --onefile --hidden-import=module_name main.py
复制代码

4.8 使用spec文件

对于更复杂的打包需求,你可以使用spec文件进行配置。spec文件是一个Python脚本,定义了如何打包你的应用程序。

1. 首先生成spec文件:pyinstaller --name="MyApp" main.py这会生成一个MyApp.spec文件。
2. 编辑spec文件,例如:

首先生成spec文件:
  1. pyinstaller --name="MyApp" main.py
复制代码

这会生成一个MyApp.spec文件。

编辑spec文件,例如:
  1. # -*- mode: python ; coding: utf-8 -*-
  2. block_cipher = None
  3. a = Analysis(['main.py'],
  4.              pathex=[],
  5.              binaries=[],
  6.              datas=[('src/images', 'images')],  # 添加数据文件
  7.              hiddenimports=['module_name'],  # 添加隐藏导入
  8.              hookspath=[],
  9.              runtime_hooks=[],
  10.              excludes=[],
  11.              win_no_prefer_redirects=False,
  12.              win_private_assemblies=False,
  13.              cipher=block_cipher,
  14.              noarchive=False)
  15. pyz = PYZ(a.pure, a.zipped_data,
  16.              cipher=block_cipher)
  17. exe = EXE(pyz,
  18.           a.scripts,
  19.           a.binaries,
  20.           a.zipfiles,
  21.           a.datas,
  22.           [],
  23.           name='MyApp',
  24.           debug=False,
  25.           bootloader_ignore_signals=False,
  26.           strip=False,
  27.           upx=True,
  28.           upx_exclude=[],
  29.           runtime_tmpdir=None,
  30.           console=False,  # 不显示控制台窗口
  31.           icon='your_icon.ico')  # 添加图标
复制代码

1. 使用spec文件进行打包:pyinstaller MyApp.spec
  1. pyinstaller MyApp.spec
复制代码

5. 处理打包过程中的常见问题

5.1 缺少模块或依赖项

有时候,打包后的程序运行时会提示缺少某些模块。这通常是因为PyInstaller没有正确检测到这些依赖项。

解决方案:

1. 使用--hidden-import选项手动指定缺失的模块:pyinstaller --onefile --hidden-import=missing_module main.py
2. 确保所有依赖项都已正确安装:pip install missing_module
3. 检查代码中是否有动态导入(如importlib.import_module),如果有,确保在spec文件中添加这些模块。

使用--hidden-import选项手动指定缺失的模块:
  1. pyinstaller --onefile --hidden-import=missing_module main.py
复制代码

确保所有依赖项都已正确安装:
  1. pip install missing_module
复制代码

检查代码中是否有动态导入(如importlib.import_module),如果有,确保在spec文件中添加这些模块。

5.2 数据文件路径问题

如果你的程序使用了数据文件(如图片、配置文件等),打包后可能会出现路径错误。

解决方案:

1. 使用--add-data选项添加数据文件:pyinstaller --onefile --add-data="src/images;images" main.py
2. 在代码中使用相对路径或资源路径:

使用--add-data选项添加数据文件:
  1. pyinstaller --onefile --add-data="src/images;images" main.py
复制代码

在代码中使用相对路径或资源路径:
  1. import sys
  2. import os
  3. def resource_path(relative_path):
  4.     """ 获取资源的绝对路径,适用于开发和打包后的环境 """
  5.     try:
  6.         # PyInstaller创建一个临时文件夹,并将路径存储在_MEIPASS中
  7.         base_path = sys._MEIPASS
  8.     except Exception:
  9.         base_path = os.path.abspath(".")
  10.     return os.path.join(base_path, relative_path)
  11. # 使用示例
  12. image_path = resource_path("images/logo.png")
复制代码

5.3 程序启动缓慢

打包成单文件后,程序启动可能会变慢,因为需要先解压文件到临时目录。

解决方案:

1. 考虑打包成目录而不是单文件:pyinstaller main.py
2. 使用UPX压缩可执行文件:pyinstaller --onefile --upx-dir=path_to_upx main.py注意,你需要先下载UPX工具并指定其路径。
3. 减少不必要的依赖项,使用--exclude-module选项排除不需要的模块:pyinstaller --onefile --exclude-module=matplotlib main.py

考虑打包成目录而不是单文件:
  1. pyinstaller main.py
复制代码

使用UPX压缩可执行文件:
  1. pyinstaller --onefile --upx-dir=path_to_upx main.py
复制代码

注意,你需要先下载UPX工具并指定其路径。

减少不必要的依赖项,使用--exclude-module选项排除不需要的模块:
  1. pyinstaller --onefile --exclude-module=matplotlib main.py
复制代码

5.4 打包后的文件过大

有时候,打包后的exe文件可能会非常大,这通常是因为包含了不必要的依赖项。

解决方案:

1. 使用虚拟环境创建一个干净的环境,只安装必要的包:python -m venv myenv
myenv\Scripts\activate
pip install pyinstaller
pip install only_necessary_packages
2. 使用--exclude-module选项排除不需要的模块:pyinstaller --onefile --exclude-module=tkinter main.py
3. 使用UPX压缩(如前所述)。

使用虚拟环境创建一个干净的环境,只安装必要的包:
  1. python -m venv myenv
  2. myenv\Scripts\activate
  3. pip install pyinstaller
  4. pip install only_necessary_packages
复制代码

使用--exclude-module选项排除不需要的模块:
  1. pyinstaller --onefile --exclude-module=tkinter main.py
复制代码

使用UPX压缩(如前所述)。

5.5 多进程或线程问题

如果你的程序使用了多进程或多线程,打包后可能会遇到问题。

解决方案:

1. 在主程序中添加以下代码:
  1. import multiprocessing
  2. if __name__ == '__main__':
  3.     multiprocessing.freeze_support()  # 这一行很重要
  4.     # 你的主程序代码
复制代码

1. 确保在Windows上正确处理多进程的创建方式。

5.6 打包后的程序无法找到外部库

有时候,程序依赖的外部库(如DLL文件)可能无法正确打包。

解决方案:

1. 使用--add-binary选项手动添加二进制文件:pyinstaller --onefile --add-binary="path/to/library.dll;." main.py
2. 在spec文件中添加二进制文件:

使用--add-binary选项手动添加二进制文件:
  1. pyinstaller --onefile --add-binary="path/to/library.dll;." main.py
复制代码

在spec文件中添加二进制文件:
  1. a = Analysis(['main.py'],
  2.              pathex=[],
  3.              binaries=[('path/to/library.dll', '.')],
  4.              # ... 其他选项
  5.              )
复制代码

6. 高级打包技巧

6.1 使用UPX压缩可执行文件

UPX是一个可执行文件压缩工具,可以显著减小打包后的文件大小。

1. 下载UPX:从UPX官方网站下载UPX工具。
2. 解压UPX到一个目录,例如C:\upx。
3. 使用--upx-dir选项指定UPX路径:pyinstaller --onefile --upx-dir=C:\upx main.py
  1. pyinstaller --onefile --upx-dir=C:\upx main.py
复制代码

6.2 创建安装程序

打包完成后,你可能希望创建一个安装程序,方便用户安装你的应用程序。可以使用Inno Setup或NSIS等工具创建安装程序。

以下是使用Inno Setup创建安装程序的简单步骤:

1. 下载并安装Inno Setup。
2. 创建一个新的Inno Setup脚本(.iss文件)。
3. 在脚本中定义安装程序的基本信息:
  1. [Setup]
  2. AppName=My Application
  3. AppVersion=1.0
  4. DefaultDirName={pf}\My Application
  5. DefaultGroupName=My Application
  6. OutputDir=installer
  7. [Files]
  8. Source: "dist\MyApp.exe"; DestDir: "{app}"
  9. Source: "dist\*"; DestDir: "{app}"; Flags: recursesubdirs
  10. [Icons]
  11. Name: "{group}\My Application"; Filename: "{app}\MyApp.exe"
复制代码

1. 编译脚本生成安装程序。

6.3 数字签名

为了增加用户对你应用程序的信任,你可以对exe文件进行数字签名。

1. 获取代码签名证书(可以从证书颁发机构购买)。
2. 使用signtool或其他签名工具对exe文件进行签名:signtool sign /f your_certificate.pfx /p your_password dist\MyApp.exe
  1. signtool sign /f your_certificate.pfx /p your_password dist\MyApp.exe
复制代码

6.4 版本信息和资源

你可以为你的exe文件添加版本信息和其他资源。

1. 创建一个版本信息文件(version.txt):
  1. VSVersionInfo(
  2.   ffi=FixedFileInfo(
  3.     filevers=(1, 0, 0, 0),
  4.     prodvers=(1, 0, 0, 0),
  5.     mask=0x3f,
  6.     flags=0x0,
  7.     OS=0x40004,
  8.     fileType=0x1,
  9.     subtype=0x0,
  10.     date=(0, 0)
  11.   ),
  12.   kids=[
  13.     StringFileInfo(
  14.       [
  15.         StringTable(
  16.           u'040904B0',
  17.           [StringStruct(u'CompanyName', u'My Company'),
  18.            StringStruct(u'FileDescription', u'My Application'),
  19.            StringStruct(u'FileVersion', u'1.0.0.0'),
  20.            StringStruct(u'InternalName', u'MyApp'),
  21.            StringStruct(u'LegalCopyright', u'Copyright © 2023 My Company'),
  22.            StringStruct(u'OriginalFilename', u'MyApp.exe'),
  23.            StringStruct(u'ProductName', u'My Application'),
  24.            StringStruct(u'ProductVersion', u'1.0.0.0')])
  25.       ]),
  26.     VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
  27.   ]
  28. )
复制代码

1. 使用--version-file选项指定版本信息文件:pyinstaller --onefile --version-file=version.txt main.py
  1. pyinstaller --onefile --version-file=version.txt main.py
复制代码

7. 测试和分发表述

7.1 测试打包后的应用程序

打包完成后,务必在目标环境中测试你的应用程序:

1. 在不同的Windows版本上测试(如Windows 10、Windows 11等)。
2. 在没有安装Python的计算机上测试。
3. 测试所有功能是否正常工作。
4. 检查是否有任何文件路径问题或依赖项问题。

7.2 分发表述

当你的应用程序测试无误后,你可以考虑以下方式分发:

1. 直接分享exe文件(适用于单文件打包)。
2. 打包整个dist目录为zip文件分享。
3. 创建安装程序(如前所述)。
4. 使用云存储或文件分享服务分享。

8. 实际案例:打包一个完整的应用程序

让我们通过一个更复杂的例子来演示整个打包过程。假设我们有一个简单的图片查看器应用程序,它有以下特点:

• 使用Tkinter作为GUI框架
• 支持打开和显示图片
• 支持基本的图片操作(旋转、缩放)
• 包含多个Python文件和资源文件

8.1 项目结构
  1. image_viewer/
  2. │── main.py
  3. │── image_processor.py
  4. │── gui/
  5. │   ├── __init__.py
  6. │   ├── main_window.py
  7. │   └── dialogs.py
  8. │── resources/
  9. │   ├── icons/
  10. │   │   ├── icon.ico
  11. │   │   ├── open.png
  12. │   │   └── save.png
  13. │   └── images/
  14. │       └── default.jpg
  15. │── requirements.txt
  16. └── README.md
复制代码

8.2 主要代码

main.py:
  1. import tkinter as tk
  2. from gui.main_window import MainWindow
  3. def main():
  4.     root = tk.Tk()
  5.     app = MainWindow(root)
  6.     root.mainloop()
  7. if __name__ == "__main__":
  8.     main()
复制代码

gui/main_window.py:
  1. import tkinter as tk
  2. from tkinter import filedialog, messagebox
  3. from PIL import Image, ImageTk
  4. import os
  5. import sys
  6. def resource_path(relative_path):
  7.     """ 获取资源的绝对路径,适用于开发和打包后的环境 """
  8.     try:
  9.         # PyInstaller创建一个临时文件夹,并将路径存储在_MEIPASS中
  10.         base_path = sys._MEIPASS
  11.     except Exception:
  12.         base_path = os.path.abspath(".")
  13.     return os.path.join(base_path, relative_path)
  14. class MainWindow:
  15.     def __init__(self, root):
  16.         self.root = root
  17.         self.root.title("图片查看器")
  18.         self.root.geometry("800x600")
  19.         
  20.         self.current_image = None
  21.         self.image_path = None
  22.         
  23.         self.create_menu()
  24.         self.create_toolbar()
  25.         self.create_image_area()
  26.         
  27.         # 加载默认图片
  28.         self.load_default_image()
  29.    
  30.     def create_menu(self):
  31.         menubar = tk.Menu(self.root)
  32.         
  33.         # 文件菜单
  34.         file_menu = tk.Menu(menubar, tearoff=0)
  35.         file_menu.add_command(label="打开", command=self.open_image)
  36.         file_menu.add_command(label="保存", command=self.save_image)
  37.         file_menu.add_separator()
  38.         file_menu.add_command(label="退出", command=self.root.quit)
  39.         menubar.add_cascade(label="文件", menu=file_menu)
  40.         
  41.         # 编辑菜单
  42.         edit_menu = tk.Menu(menubar, tearoff=0)
  43.         edit_menu.add_command(label="向左旋转", command=lambda: self.rotate_image(-90))
  44.         edit_menu.add_command(label="向右旋转", command=lambda: self.rotate_image(90))
  45.         edit_menu.add_separator()
  46.         edit_menu.add_command(label="放大", command=lambda: self.scale_image(1.25))
  47.         edit_menu.add_command(label="缩小", command=lambda: self.scale_image(0.8))
  48.         menubar.add_cascade(label="编辑", menu=edit_menu)
  49.         
  50.         self.root.config(menu=menubar)
  51.    
  52.     def create_toolbar(self):
  53.         toolbar = tk.Frame(self.root)
  54.         toolbar.pack(side=tk.TOP, fill=tk.X)
  55.         
  56.         # 打开按钮
  57.         open_icon = tk.PhotoImage(file=resource_path("resources/icons/open.png"))
  58.         open_button = tk.Button(toolbar, image=open_icon, command=self.open_image)
  59.         open_button.image = open_icon  # 保持引用
  60.         open_button.pack(side=tk.LEFT, padx=2, pady=2)
  61.         
  62.         # 保存按钮
  63.         save_icon = tk.PhotoImage(file=resource_path("resources/icons/save.png"))
  64.         save_button = tk.Button(toolbar, image=save_icon, command=self.save_image)
  65.         save_button.image = save_icon  # 保持引用
  66.         save_button.pack(side=tk.LEFT, padx=2, pady=2)
  67.    
  68.     def create_image_area(self):
  69.         self.image_label = tk.Label(self.root)
  70.         self.image_label.pack(fill=tk.BOTH, expand=True)
  71.    
  72.     def load_default_image(self):
  73.         default_path = resource_path("resources/images/default.jpg")
  74.         if os.path.exists(default_path):
  75.             self.load_image(default_path)
  76.    
  77.     def open_image(self):
  78.         file_path = filedialog.askopenfilename(
  79.             filetypes=[("Image files", "*.jpg *.jpeg *.png *.bmp *.gif")]
  80.         )
  81.         if file_path:
  82.             self.load_image(file_path)
  83.    
  84.     def load_image(self, file_path):
  85.         try:
  86.             self.image_path = file_path
  87.             image = Image.open(file_path)
  88.             self.current_image = image
  89.             
  90.             # 调整图像大小以适应窗口
  91.             image.thumbnail((800, 600))
  92.             photo = ImageTk.PhotoImage(image)
  93.             
  94.             self.image_label.config(image=photo)
  95.             self.image_label.image = photo  # 保持引用
  96.             
  97.         except Exception as e:
  98.             messagebox.showerror("错误", f"无法加载图像: {str(e)}")
  99.    
  100.     def save_image(self):
  101.         if not self.current_image:
  102.             messagebox.showwarning("警告", "没有图像可保存")
  103.             return
  104.             
  105.         file_path = filedialog.asksaveasfilename(
  106.             defaultextension=".jpg",
  107.             filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png"), ("All files", "*.*")]
  108.         )
  109.         if file_path:
  110.             try:
  111.                 self.current_image.save(file_path)
  112.                 messagebox.showinfo("成功", "图像已保存")
  113.             except Exception as e:
  114.                 messagebox.showerror("错误", f"无法保存图像: {str(e)}")
  115.    
  116.     def rotate_image(self, angle):
  117.         if self.current_image:
  118.             self.current_image = self.current_image.rotate(-angle)
  119.             photo = ImageTk.PhotoImage(self.current_image)
  120.             self.image_label.config(image=photo)
  121.             self.image_label.image = photo
  122.    
  123.     def scale_image(self, factor):
  124.         if self.current_image:
  125.             width, height = self.current_image.size
  126.             new_size = (int(width * factor), int(height * factor))
  127.             self.current_image = self.current_image.resize(new_size)
  128.             photo = ImageTk.PhotoImage(self.current_image)
  129.             self.image_label.config(image=photo)
  130.             self.image_label.image = photo
复制代码

requirements.txt:
  1. pillow>=9.0.0
复制代码

8.3 打包步骤

1. 首先安装所有依赖项:pip install -r requirements.txt
pip install pyinstaller
2. 创建一个spec文件(例如image_viewer.spec):

首先安装所有依赖项:
  1. pip install -r requirements.txt
  2. pip install pyinstaller
复制代码

创建一个spec文件(例如image_viewer.spec):
  1. # -*- mode: python ; coding: utf-8 -*-
  2. block_cipher = None
  3. a = Analysis(['main.py'],
  4.              pathex=[],
  5.              binaries=[],
  6.              datas=[('resources', 'resources')],  # 添加资源文件夹
  7.              hiddenimports=[],  # 如果有隐藏导入,在这里添加
  8.              hookspath=[],
  9.              runtime_hooks=[],
  10.              excludes=[],
  11.              win_no_prefer_redirects=False,
  12.              win_private_assemblies=False,
  13.              cipher=block_cipher,
  14.              noarchive=False)
  15. pyz = PYZ(a.pure, a.zipped_data,
  16.              cipher=block_cipher)
  17. exe = EXE(pyz,
  18.           a.scripts,
  19.           a.binaries,
  20.           a.zipfiles,
  21.           a.datas,
  22.           [],
  23.           name='ImageViewer',
  24.           debug=False,
  25.           bootloader_ignore_signals=False,
  26.           strip=False,
  27.           upx=True,
  28.           upx_exclude=[],
  29.           runtime_tmpdir=None,
  30.           console=False,  # 不显示控制台窗口
  31.           icon='resources/icons/icon.ico')  # 添加图标
复制代码

1. 使用spec文件进行打包:pyinstaller image_viewer.spec
2. 打包完成后,在dist目录下会生成ImageViewer.exe文件。

使用spec文件进行打包:
  1. pyinstaller image_viewer.spec
复制代码

打包完成后,在dist目录下会生成ImageViewer.exe文件。

8.4 测试和分发

1. 将dist目录中的ImageViewer.exe复制到另一台没有安装Python的计算机上测试。
2. 确保所有功能正常工作,包括打开图片、保存图片、旋转和缩放等操作。
3. 如果一切正常,你可以将ImageViewer.exe文件或者整个dist目录打包分享给其他用户。

9. 总结

通过本文,我们详细介绍了在PyCharm环境下将Python程序打包成exe文件的整个过程,包括:

• 安装和配置PyInstaller
• 使用PyInstaller的基本命令和选项
• 处理打包过程中的常见问题
• 高级打包技巧,如UPX压缩、创建安装程序等
• 通过实际案例演示了打包一个完整应用程序的过程

打包Python程序为exe文件是分享你的应用程序的有效方式,让没有Python知识的用户也能轻松使用你的软件。虽然打包过程中可能会遇到各种问题,但通过本文提供的方法和技巧,你应该能够解决大部分问题。

希望这篇详细的教程能够帮助你成功地将Python程序打包成exe文件,并轻松分享你的应用程序给更多用户。如果你在打包过程中遇到其他问题,可以参考PyInstaller的官方文档或社区资源获取更多帮助。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则