耗时3小时,把这两天做好的爬虫程序,用Python封装成exe文件

先执行命令如下:

bash 复制代码
pip install pyinstaller
py -m PyInstaller --log-level=DEBUG --add-data "config.ini;." nmpa_gui.py

很快在dist目录下就有生成一个nmpa_gui文件夹,运行 nmpa_gui.exe,报错:

1️⃣初始化爬虫...

程序执行出错: 'database'

解决办法:需要把config文件(数据库配置信息)拷贝一份到nmpa_gui文件夹下。继续报错:

2️⃣初始化爬虫...

程序执行出错: No localization support for language 'eng'

解决办法:手动复制 locales 文件夹到项目目录并打包(简单直接)

找到你当前环境中安装的 MySQL Connector 的 locales 文件夹:

默认路径为:

bash 复制代码
C:\Users\<你的用户名>\AppData\Roaming\Python\Python311\site-packages\mysql\connector\locales

依旧报错:

3️⃣初始化爬虫...

程序执行出错: Authentication plugin 'mysql_native_password' is not supported

将 _mysql_connector.pyd 复制到项目目录,文件源路径在

bash 复制代码
C:\Users\<你的用户名>\AppData\Roaming\Python\Python311\site-packages

建议在你的项目根目录下创建一个文件夹,比如 internal_libs/,然后把 _mysql_connector.pyd 放进去,另外还需新建文件夹dlls,将libmysql.dll 拷贝到下面。

同时修改.spec文件,主要是 binaries,datas,hiddenimports 这三处:

javascript 复制代码
# -*- mode: python ; coding: utf-8 -*-

import os
from PyInstaller.utils.hooks import collect_data_files

# 收集 mysql connector 的语言资源(eng)
mysql_locales = collect_data_files('mysql.connector', subdir='locales')

block_cipher = None

a = Analysis(
    ['nmpa_gui.py'],
    pathex=[os.path.abspath(".")],
    binaries=[
        ('internal_libs\\_mysql_connector.cp311-win_amd64.pyd', '.'),
        ('dlls\\libmysql.dll', '.')  # 添加 libmysql.dll 支持
    ],
    datas=[
        ('config.ini', '.'),
        ('locales', 'mysql\\connector\\locales')
    ] + mysql_locales,
    hiddenimports=[
        'mysql.connector.authentication',
        'mysql.connector.locales.eng.client_error',
        'mysql.connector.connection_cext',
        'mysql.connector.plugins.mysql_native_password',  # ⬅️ 关键:显式导入认证插件
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)

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

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='nmpa_gui',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,  # 保持控制台输出便于调试认证问题
    disable_windowed_traceback=True,
    argv_emulation=False,
)

coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='nmpa_gui',
    clean=True,
)

对了,每次重新打包前,建议先清一下缓存,bat命令如下:

bash 复制代码
@echo off
echo 正在清理 PyInstaller 缓存...
rmdir /s /q build dist __pycache__ __pyinstaller
del /q *.pyc *.pyo *.spec
echo 清理完成。

最终使用如下打包命令:

bash 复制代码
py -m PyInstaller --noconfirm nmpa_gui.spec

至此,顺利打包成功并成功运行!

怎么样,看着是不是瞬间就高大上一些了,Python真是利器!!!后续可以再放出来一些配置,比如一批抓取多少页后休息,每插入一页后休息多久,一批完成后休息多久等等!

P.S.因为Cursor又到期了,这点小问题,懒得再去麻烦他, 这次打包中遇到的错误,尤其是困扰比较久的问题3️⃣,最终在阿里通义灵码的技术支持下,得以解决,在此表示感谢,隔壁那位CODEBUDDY和大傻子差不多!

相关推荐
阿kun要赚马内4 分钟前
MCP(Model Context Protocol,模型上下文协议)
人工智能·python
来了就未晚38 分钟前
Python基础 学习代码存储与命名规范
开发语言·python·学习
落魄大学生之流水线上谋生计1 小时前
LangGraph 基本用法指南
java·windows·python·langchain
深蓝电商API1 小时前
Referer 校验原理
爬虫·referer
华研前沿标杆游学1 小时前
宇树科技对外开放参访?机器人企业参访体验与行业核心价值解析
python
今天会营业1 小时前
Miniconda安装
python·机器学习
benchmark_cc1 小时前
Python量化实战:如何检测并剔除历史数据中的“闪崩/乌龙指”异常价格点?
开发语言·人工智能·python·量化·quantdash·量化数据源
天空1102 小时前
你的网站在 AI 眼里是什么样:三类「人能看见、AI 看不见」的内容
爬虫·seo
伞伞悦读3 小时前
【第14期】Python 基础语法入门:缩进、注释、标识符、代码块和解释器执行
python
Java后端的Ai之路3 小时前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧