pyinstaller 打包 含静态文件例子

本文介绍了使用PyInstaller进行Python程序打包的方法,包括通过spec文件和命令行参数。重点讨论了如何处理静态文件,确保程序在打包后能正确找到它们。此外,还测试了仅导入os和sys与引入pandas对打包大小的影响,发现导入pandas显著增加了体积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://pyinstaller.readthedocs.io/en/stable/spec-files.html

先上官网

官网写了两种打包静态文件的方法,一种是通过spec文件,一种是直接命令行打包

 

官网只写了这部分,没有python调用的部分,实践中一直找不到静态文件

后来发现,打包后调用的路径不能用当前路径了

例子:

完整程序如下,调用一个a.txt 

#  a.py
import os
import sys

if getattr(sys, 'frozen', None):
    basedir = sys._MEIPASS  # 打包后用的这个路径
else:
    basedir = os.path.dirname(__file__)  # 直接运行的时候用的这个

#  通过这种写法就可以实现打包和当前调试都可以运行

with open(os.path.join(basedir, 'a.txt'), 'r', encoding='utf-8') as f:
    d = f.read()
    print(d)
# a.txt
1
2
3

 

 执行 pyinstaller -Fw a.py

生成了build 和dist和.spec 文件

直接运行报错

因为还没有添加静态文件 修改spec

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['a.py'],
             pathex=['E:\\all_project\\test_pyinstall'],
             binaries=[],
             datas=[('./a.txt', '.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='a',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True)

这里我修改了datas  和最后的console,设置console是为了看到print

最终成功

 

 

二: 打包大小测试

只import 了 os,sys 打包后结果为6M多点

 

目前虚拟环境中 只安装了 pyinstaller,无其他任何包

然后安装了pandas,不import测试,打包后结果和之前一样, 说明即使虚拟环境有其他包,只要不导入是没有影响的

测试from pandas import read_csv ,和import pandas 打包后的大小是否不同 

 

增加了一句 import pandas 

直接变成了232M

改成 from pandas import read_excel,结果依然是232M

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值