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

PyCharm运行外部脚本报错:ModuleNotFoundError: No module named '_fontdata_enc_winansi'

问题解决:reportlab动态导入模块失败的问题

问题分析

核心问题出在reportlab.pdfbase._fontdata.py的动态导入逻辑:代码直接用短模块名(如_fontdata_enc_winansi)导入,未带上完整包路径或相对导入标识。虽然PyCharm的内容根目录配置让静态解析无报错,但运行时Python解释器无法在全局命名空间中定位到同包内的这些模块。

解决方案

1. 修复reportlab的动态导入代码

找到reportlab/pdfbase/_fontdata.py中使用importlib.import_module的动态导入部分,修改为以下两种方式之一:

  • 相对导入方式(推荐,保持包结构独立性):

    import importlib
    # module_name为动态生成的目标模块名,例如"_fontdata_enc_winansi"
    module = importlib.import_module(f".{module_name}", __name__)
    

    这里的.表示相对当前包导入,__name__提供当前模块的包上下文,让解释器能定位到同目录下的模块。

  • 完整包路径方式:

    import importlib
    module = importlib.import_module(f"reportlab.pdfbase.{module_name}")
    

    直接指定完整包路径,确保解释器能全局定位到目标模块。

2. 完善PyCharm的解释器路径配置

仅设置内容根目录可能不足以让运行时解释器正确识别路径,补充以下配置:

  • 打开File > Settings > Project: [你的项目名] > Python Interpreter
  • 点击右上角齿轮图标,选择Show All
  • 选中当前使用的Python解释器,点击右侧的Show paths for the selected interpreter
  • 点击+号,分别添加z3c.rml和reportlab的src目录,点击OK保存配置

3. 验证配置有效性

运行脚本前,可在PyCharm的Python控制台执行以下代码确认路径:

import sys
print([p for p in sys.path if "z3c.rml" in p or "reportlab" in p])

确保输出包含两个外部项目的src目录,同时确认_fontdata_enc_winansi.py文件确实存在于reportlab/pdfbase/目录下。

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

相关产品推荐
方舟 Agent Plan

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

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