PyInstaller打包py文件成exe

安装 PyInstaller

确保 your.py 是你的主入口文件,而其他模块和资源也需要在打包时一起包含。

基本打包命令

使用 PyInstaller 打包最基本的命令如下:

pyinstaller --name YourpyName --onefile your.py
  •  --onefile 参数告诉 PyInstaller 将所有内容打包到一个独立的二进制文件中。
  •  最终生成的可执行文件会放在 dist/ 目录下。
  • name 是打包后的名称

打包多文件和资源

项目中往往包含一些非 Python 文件,如配置文件、图片等。这些文件需要在打包时一起捆绑,以便在运行时访问。

使用 --add-data 参数可以将外部文件打包进去。格式如下:

pyinstaller --onefile --add-data "source_path;destination_path" your.py

注意:

在 Windows 中,源路径和目标路径使用分号 ; 分隔

在 Linux 和 macOS 中,使用冒号 : 分隔。

输出目录

  • PyInstaller 默认生成两个文件夹:

    • build/: 临时构建文件。

    • dist/: 最终输出的 EXE 文件。

查看生成的 .spec 文件

首次运行后会生成 YourAppName.spec 文件,检查其中配置是否正确:

Spec 文件是 PyInstaller 打包的配置文件,默认情况下,PyInstaller 在每次打包时自动生成一个 .spec 文件。你可以手动生成或编辑这个文件以实现更高级的配置。

生成 Spec 文件后,你可以根据需要编辑其中的设置,然后通过以下命令再次打包:

pyinstaller my_app_name.spec

常见问题

文件路径找不到

  • 问题原因: 打包后的可执行文件运行时,文件路径会变为临时路径,直接使用相对路径可能会找不到文件。
  • 解决方案: 使用 sys._MEIPASS 定位打包后的临时目录,确保文件路径正确。

打包后的文件过大

  • 问题原因: PyInstaller 会将所有依赖库打包进可执行文件,导致文件较大。
  • 解决方案: 可以通过 --exclude-module 参数排除不需要的模块,或使用 --onefile 选项减少冗余文件。

运行时出现缺少依赖

  • 问题原因: PyInstaller 在某些情况下无法自动检测到所有依赖项。
  • 解决方案: 使用hidden-import 选项手动指定依赖模块,例如:
    pyinstaller --onefile --hidden-import module_name main.py

(xxx) root@45xxxx:/xxxx/dist/xxx# ./xx --weights weights/best.pt --imgsz 640 

报错:ModuleNotFoundError: No module named 'importlib.metadata'

  1. Python 版本兼容性

    • importlib.metadata 是 Python 3.8+ 的标准库模块。

    • 如果你的 Python 版本是 3.7 或更低,重新安装python3.8+以及对应的依赖。

  2. PyInstaller 未正确打包依赖

    • 即使安装了 importlib-metadata,PyInstaller 也可能未自动检测到此依赖。

解决方案

1. 安装 importlib-metadata 包

pip install importlib-metadata

2. 在 .spec 文件中添加 hiddenimports

a = Analysis(
    ['detect.py'],
    pathex=['/home/common-dir/xxx'],
    binaries=[],
    datas=[
        ('models/**/*', 'models'),
        ('ultralytics/cfg/**/*', 'ultralytics/cfg'),
        ('weights/**/*', 'weights')
    ],
    hiddenimports=[
        'importlib.metadata',  # 添加此行
        'models'
    ],
    ...
)

3. (可选)升级 Python 到 3.8+

  • 如果升级 Python 可行,直接使用内置的 importlib.metadata

清理并重新打包
# 清理旧构建
rm -rf build/ dist/

del YourAppName.spec

pyinstaller xxx.spec
验证生成的可执行文件
cd /home/common-dir/xxx/dist/SOMI/
./xxx --weights weights/best.pt --imgsz 640 --name xxx
其他可能的问题

PyInstaller 版本过旧

pip install --upgrade pyinstaller

系统路径问题

  • 确保打包时使用的 Python 环境与当前激活的环境一致。

报错:FileNotFoundError: [Errno 2] No such file or directory: '/home/common-dir/xxx/dist/xx/_internal/utils/torch_utils.pyc'
[PYI-74787:ERROR] Failed to execute script 'detect' due to unhandled exception!

找到你utils/torch_utils.py文件,复制副本,修改副本的后缀名,改成utils/torch_utils.pyc,直接拷贝到对应的dist文件目录下

注意:linux系统下生成的不是exe文件,是一个没有拓展名的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值