python pyinstaller打包使用教程,直接打包或.spec打包

个人用到时所写,如有补充、不足或问题,可以联系更改

使用pyinstaller直接打包,可能你引用的包或目录文件出现有但查找不到,没有这样的文件。我们就要去找文件改代码,看路径,很麻烦。这时候就可以使用.spec打包

**安装 PyInstaller**:如果你还没有安装 `PyInstaller`,你可以通过以下命令安装:

 pip install pyinstaller

使用pyinstaller直接打包

pyinstaller -c -F user_name.py -i user_name.ico

列举几个常用命令:

-D, --onedir 生成一个目录,可执行程序。

-F, --onefile 生成单个可执行文件。

-c, --console, --nowindowed 为标准 i/o 打开一个控制台窗口(默认选项)。在 Windows 中,如果第一个脚本是 ‘.pyw’ 文件,则此选项无效。简称(带控制台)

-w, --windowed, --noconsole 不提供用于标准 i/o 的控制台窗口。在 macOS 上,这也会触发构建一个 .app 捆绑程序。在 Windows 系统中,如果第一个脚本是 ‘.pyw’ 文件,则会自动设置该选项。在 *NIX 系统上,该选项将被忽略。简称(不带控制台,gui界面上非常有用)

-n NAME, --name NAME 为捆绑的应用程序和 spec 文件指定的名称(默认值:第一个脚本的名称)。

--i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE"> FILE.ico:将图标应用于 Windows 可执行文件。FILE.exe,ID:从一个 exe 文件中提取带有 ID 的图标。FILE.icns:将图标应用到 macOS 的 .app 捆绑程序中。如果输入的图像文件不是对应平台的格式(Windows 为 ico,Mac 为 icns),PyInstaller 会尝试使用 Pillow 将图标翻译成正确的格式(如果安装了 Pillow)。使用 “NONE” 不应用任何图标,从而使操作系统显示默认图标(默认值:使用 PyInstaller 的图标)。该选项可多次使用。

可参考pyinstaller中文文档

使用 `PyInstaller` 生成 `.spec` 文件可以帮助你自定义打包过程。以下是如何生成 `.spec` 文件的步骤:

1. **生成 .spec 文件**:在命令行中进入你的 Python 脚本所在的目录,并运行以下命令(假设你的脚本名为 `your_script.py`):

   pyinstaller --name=your_app_name --onefile --windowed your_script.py

   - `--name`:指定生成的应用程序名称。
   - `--onefile`:将所有文件打包成一个可执行文件。
   - `--windowed`:在 Windows 上启动时隐藏命令行窗口(适用于 GUI 应用)。

   上述命令会生成一个 `.spec` 文件(例如 `your_app_name.spec`)在当前目录。

2. **自定义 .spec 文件**:可以使用文本编辑器打开生成的 `.spec` 文件,进行一些自定义设置,比如:

   - 添加数据文件(`datas`)
   - 修改隐式导入(`hiddenimports`)
   - 设置图标(`icon='your_icon.ico'`)

3. **使用 .spec 文件打包**:在修改 `.spec` 文件后,可以使用以下命令进行打包:

   pyinstaller your_app_name.spec

通过这些步骤,你就能够生成并自定义 `.spec` 文件,用于控制打包过程。

自定义,如图:

block_cipher = None

a = Analysis(
    ['执行文件名'],
    pathex=["C:\\Users\\user\\Desktop填写到项目文件的绝对路径"],
    binaries=[],
    datas=[
        # 将同一目录的文件和其他需要的数据文件包括在内,如
        (os.path.join("C:填写到项目文件的绝对路径", 'generate_img.py'), '.'),
        (os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto'), 'wechat_auto'),
        (os.path.join("C:填写到项目文件的绝对路径", 'image.jpg'), '.'),
        (os.path.join("C:填写到项目文件的绝对路径", 'text_generate.md'), '.'),
        (os.path.join("C:填写到项目文件的绝对路径", 'ctrl_img.py'), '.'),
        (os.path.join("C:填写到项目文件的绝对路径", 'text_img.py'), '.'),
        (os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto/__init__.py'), 'wechat_auto'),
        (os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto/wechat_c_v.py'), 'wechat_auto')        # 导入同一目录文件夹下的自定义函数
    ],
    hiddenimports=[
        'wechat_auto/wechat_c_v','requests', 'urllib3'        # 手动添加的模块名
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    cipher=block_cipher,
    noarchive=False,        # 是否显示控制台(终端)
)

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='py_tkinter_gui',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    contents_directory='.'        # 打包到同一目录下(没有就添加)
)

coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='执行文件名'
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值