耗时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和大傻子差不多!

相关推荐
峥嵘life21 分钟前
Android16 adb投屏工具Scrcpy介绍
android·开发语言·python·学习·web安全·adb
AI视觉网奇1 小时前
vscode 不能跳转 ERR_OSSL_EVP_BAD_DECRYPT
python
文心快码BaiduComate1 小时前
Comate分饰多角:全栈开发一个Python学习网站
前端·后端·python
雨声不在1 小时前
cronet从编译到修改之: 支持IP直连
python·网络协议·tcp/ip·cronet
深蓝电商API1 小时前
Requests 库详解:爬虫工程师的 “瑞士军刀”
爬虫·request
2401_841495641 小时前
【机器学习】朴素贝叶斯法
人工智能·python·数学·算法·机器学习·概率论·朴素贝叶斯法
听潮阁1 小时前
Python 旅游数据分析平台【源码请评论区留言】
python·数据分析·旅游
付玉祥1 小时前
第 2 章 变量与基本数据类型
python·llm
扑克中的黑桃A1 小时前
Python快速入门专业版(八):字符串基础:创建、拼接与切片(10+实用代码案例)
python
时间醉酒2 小时前
逻辑回归(四):从原理到实战-训练,评估与应用指南
人工智能·python·算法·机器学习·逻辑回归