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

Python3.9环境下用PyInstaller打包Eel应用出现循环导入错误如何解决

问题背景

此前Python 3.7环境下使用如下命令打包Eel脚本一切正常:
python -m eel stat1.py web --onefile --noconsole
切换到Python 3.9环境后脚本可通过控制台正常启动,但执行相同打包命令时报错,报错信息如下:

正在基于主脚本'stat1.py'和web文件夹'web'构建可执行文件...
执行命令:pyinstaller stat1.py --hidden-import bottle_websocket --add-data C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\site-packages\eel\eel.js;eel --add-data web;web --onefile --noconsole
720 INFO: PyInstaller: 4.5.1 720 INFO: Python: 3.9.4 720 INFO: Platform: Windows-10-10.0.19041-SP0 720 INFO: wrote C:\Users\vadim.sharoikin\Desktop\stat\stat1.spec 728 INFO: UPX is not available. 730 INFO: Extending PYTHONPATH with paths ['C:\Users\vadim.sharoikin\Desktop\stat', 'C:\Users\vadim.sharoikin\Desktop\stat']
致命Python错误:init_import_site: 导入site模块失败
Python运行时状态:已初始化
回溯(最近调用最后): File "C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\site.py", line 73, in
import os File "C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\os.py", line 27, in
import stat as st File "C:\Users\vadim.sharoikin\Desktop\stat\stat.py", line 1, in
import pyodbc, datetime,time,eel, jinja2 File "C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\site-packages\eel_init_.py", line 5, in
from gevent.threading import Timer File "C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\site-packages\gevent_init_.py", line 62, in
import socket # pylint:disable=unused-import,useless-suppression File "C:\Users\vadim.sharoikin\AppData\Local\Programs\Python\Python39\lib\socket.py", line 67, in
all.extend(os._get_exports_list(_socket)) AttributeError: 部分初始化的模块'os'没有属性'_get_exports_list'(极有可能是循环导入导致)
后续多次重复上述同类报错,最终提示pre-safe-import-module hook失败,需要修复。

错误原因
  • 核心原因是项目目录下存在与Python标准库重名的文件stat.py。Python导入模块时会优先搜索当前工作目录,标准库os模块初始化时需要导入标准库stat模块,实际加载到了你自己写的stat.py,而该文件又导入了eel、gevent等依赖,gevent初始化又需要依赖socket模块,socket模块又会调用还没初始化完成的os模块的属性,形成循环导入,最终触发报错。
  • 次要原因为版本适配问题:Python3.9调整了部分模块的导入顺序规则,加上你使用的PyInstaller 4.5.1、gevent、eel的版本可能存在适配性缺陷,导致Python3.7环境下未暴露的冲突在3.9环境下显现。
解决方法
  • 第一步:重命名项目目录下的stat.py文件,改为不与标准库重名的名称,例如stat_custom.py,同时同步修改所有引用该文件的导入语句。
  • 第二步:检查项目根目录下是否存在其他与Python标准库重名的文件,例如os.py、socket.py、time.py等,如有同样进行重命名。
  • 第三步:升级配套依赖到适配Python3.9的版本,执行命令:pip install --upgrade pyinstaller eel gevent
  • 第四步:重新执行原始打包命令即可正常构建可执行文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03