You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python whois功能打包为exe后报错缺失public_suffix_list.dat求助

PyInstaller/auto-py-to-exe打包后whois功能报错解决方案

根因说明

你使用的whois第三方库运行时需要加载自带的public_suffix_list.dat公共后缀数据文件,PyInstaller默认仅打包脚本依赖的.py格式模块,不会自动包含第三方库的非代码类资源文件,因此打包后的exe运行时解压到临时_MEIxxxx目录后找不到对应资源文件,触发路径不存在报错。

解决方案

方案1:打包时手动添加资源文件(推荐)

首先找到本地Python环境中whois库的资源文件路径,默认路径为Python安装目录下的Lib\site-packages\whois\data\public_suffix_list.dat,记录该路径后根据打包方式选择对应操作:

  • 若使用auto-py-to-exe可视化工具打包:
    1. 打开工具后找到「高级」分类下的「添加数据」选项
    2. 点击新增,第一个输入框填写刚才找到的public_suffix_list.dat本地完整路径,第二个输入框填写whois/data(即打包后资源存放的相对路径)
    3. 重新执行打包即可
  • 若直接使用PyInstaller命令行打包:
    在原有打包命令后追加--add-data "本地资源路径;whois/data"参数即可,示例命令如下:
pyinstaller --noconfirm --onefile --windowed --exclude-module "_bootlocale" --add-data "C:\Users\shawn\AppData\Local\Programs\Python\Python39\Lib\site-packages\whois\data\public_suffix_list.dat;whois/data" "C:/Users/shawn/Documents/GitHub/pythonProjects/dnsQuery.py"

注意将示例中的路径替换为你本地的实际路径。

方案2:修改代码指定资源路径(备用)

如果不想每次打包都配置资源参数,可提前将public_suffix_list.dat放到脚本同级目录,在导入whois库前新增路径适配代码即可:

import os
import sys
# 适配打包运行与本地脚本运行两种场景的路径
if getattr(sys, 'frozen', False):
    # 打包后运行时的临时目录路径
    base_path = sys._MEIPASS
else:
    # 本地脚本运行时的当前目录路径
    base_path = os.path.dirname(os.path.abspath(__file__))
# 手动指定whois所需的公共后缀列表文件路径
os.environ["PUBLIC_SUFFIX_LIST_URL"] = os.path.join(base_path, "public_suffix_list.dat")
# 路径配置完成后再导入whois库
import whois

使用该方案打包时,记得将public_suffix_list.dat和脚本一起打包进exe即可。


内容的提问来源于stack exchange,提问作者Shawn Carron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:03