鱼C论坛

 找回密码
 立即注册
查看: 4222|回复: 3

[已解决]求教一下,Python 打包成安装程序的问题

[复制链接]
发表于 2023-2-27 15:38:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
你好,
我在学习python过程中,
发现如果多个.py文件和其它文件夹组成的一个系统
封装成exe文件后,
执行会出错,
提示找不到相关文件。
请教下有经验的高手,
我应该怎么才能把整个文件夹相关的资料一起封装成一个可安装的程序。
方便安装到电脑上,能正常运行。
能否提供相关教程,
万分感谢!!!
最佳答案
2023-5-17 23:18:31
你好!
你遇到的问题可能是因为你没有把所有文件都正确地打包进入exe文件中。

通常来说,将一个.py文件封装成exe文件并不会自动将其它的依赖文件(如其他.py文件、图片和文本等)一同打包进去。因此,当你尝试在另一台计算机上运行该exe文件时,程序无法找到所需的依赖文件而导致错误。

以下是一些可以帮助你解决这个问题的方法:

1. 使用pyinstaller

PyInstaller 是一个自包含(“单文件”)执行文件、可执行文件或Windows、Mac OS X、Linux、FreeBSD、Solaris和AIX平台上的Python脚本的软件包。

使用 PyInstaller 时,你可以使用`--onefile`参数告诉PyInstaller 将所有Python脚本、图像、声音、数据文件和某些二进制模块捆绑在一起成为一个单独的exe文件。

下面是一个例子,假设你的main.py文件需要引用一个helper.py文件,并且还需要一些资源文件(例如图像、字体等),那么你可以使用以下命令来生成一个单独的exe文件:


  1. pip install pyinstaller #安装
  2. pyinstaller --onefile main.py #打包
复制代码


2. 添加资产

如果你想保留所有源文件并将它们复制到特定位置,则可以使用以下方法:

首先,在你的项目根目录中创建一个`assets`文件夹,并将所有依赖文件存放在其中。

接下来,创建一个`setup.py`文件,并添加以下代码:


  1. from cx_Freeze import setup, Executable

  2. exe = Executable(
  3.     script="your_script_name.py",
  4.     base="Win32GUI", #如果你的程序带有图形界面,请使用“Win32GUI”,否则请使用“Console”
  5.     icon="path/to/your/icon.ico
  6. setup(
  7.     name="your_program_name",
  8.     version="1.0",
  9.     description="A program that does something",
  10.     options={
  11.         "build_exe": {
  12.             "packages": ["os"],
  13.             "include_files": [
  14.                 "path/to/your/assets/folder",
  15.                 "path/to/your/other.py",
  16.                 "path/to/your/data/file.txt"
  17.             ]
  18.         }
  19.     },
  20.     executables=[exe]
  21. )
复制代码


该代码将打包你的Python脚本和依赖项,并将其作为单个可执行文件复制到输出目录。

最后,运行以下命令来构建你的程序:


  1. pip install cx_Freeze #安装
  2. python setup.py build
复制代码

这将生成一个build文件夹,其中包含了你的程序和资源文件。你可以在其中找到`.exe`文件以及所有依赖的资料。

希望这些方法可以解决你的问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-27 15:41:44 | 显示全部楼层
通过设置 data 把相关的文件都打包进去
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-4 12:33:56 | 显示全部楼层
isdkz 发表于 2023-2-27 15:41
通过设置 data 把相关的文件都打包进去

因为 pyinstaller 打包的时候把文件放在了 源目录/dist 的目录里,所以你需要把打包出来的程序和文件放在一个目录下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-17 23:18:31 | 显示全部楼层    本楼为最佳答案   
你好!
你遇到的问题可能是因为你没有把所有文件都正确地打包进入exe文件中。

通常来说,将一个.py文件封装成exe文件并不会自动将其它的依赖文件(如其他.py文件、图片和文本等)一同打包进去。因此,当你尝试在另一台计算机上运行该exe文件时,程序无法找到所需的依赖文件而导致错误。

以下是一些可以帮助你解决这个问题的方法:

1. 使用pyinstaller

PyInstaller 是一个自包含(“单文件”)执行文件、可执行文件或Windows、Mac OS X、Linux、FreeBSD、Solaris和AIX平台上的Python脚本的软件包。

使用 PyInstaller 时,你可以使用`--onefile`参数告诉PyInstaller 将所有Python脚本、图像、声音、数据文件和某些二进制模块捆绑在一起成为一个单独的exe文件。

下面是一个例子,假设你的main.py文件需要引用一个helper.py文件,并且还需要一些资源文件(例如图像、字体等),那么你可以使用以下命令来生成一个单独的exe文件:


  1. pip install pyinstaller #安装
  2. pyinstaller --onefile main.py #打包
复制代码


2. 添加资产

如果你想保留所有源文件并将它们复制到特定位置,则可以使用以下方法:

首先,在你的项目根目录中创建一个`assets`文件夹,并将所有依赖文件存放在其中。

接下来,创建一个`setup.py`文件,并添加以下代码:


  1. from cx_Freeze import setup, Executable

  2. exe = Executable(
  3.     script="your_script_name.py",
  4.     base="Win32GUI", #如果你的程序带有图形界面,请使用“Win32GUI”,否则请使用“Console”
  5.     icon="path/to/your/icon.ico
  6. setup(
  7.     name="your_program_name",
  8.     version="1.0",
  9.     description="A program that does something",
  10.     options={
  11.         "build_exe": {
  12.             "packages": ["os"],
  13.             "include_files": [
  14.                 "path/to/your/assets/folder",
  15.                 "path/to/your/other.py",
  16.                 "path/to/your/data/file.txt"
  17.             ]
  18.         }
  19.     },
  20.     executables=[exe]
  21. )
复制代码


该代码将打包你的Python脚本和依赖项,并将其作为单个可执行文件复制到输出目录。

最后,运行以下命令来构建你的程序:


  1. pip install cx_Freeze #安装
  2. python setup.py build
复制代码

这将生成一个build文件夹,其中包含了你的程序和资源文件。你可以在其中找到`.exe`文件以及所有依赖的资料。

希望这些方法可以解决你的问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表