Python 3.6.0执行importlib.import_module导入模块卡住无报错
问题定位步骤
- 校验
importlib.import_module参数正确性:module_name参数传入的应该是不带.py后缀的模块名,如果你传入xxx.py会导致导入路径解析异常,部分场景下会触发导入逻辑死循环卡住,先修正参数为不带后缀的模块名后再测试。 - 验证filterpy安装和环境兼容性:脱离PyCharm调试环境,直接在系统终端使用对应Python 3.6环境执行命令
python -c "from filterpy.common import Q_discrete_white_noise",如果终端执行正常说明是PyCharm调试模式的兼容性问题;如果终端也卡住,就是Python依赖库版本不匹配导致的问题。 - 排查依赖库版本适配:filterpy 1.4.5依赖numpy、scipy数值库,Python 3.6支持的numpy最高版本为1.19.5,scipy最高版本为1.5.4,若当前安装的numpy、scipy版本超出该范围,部分MKL编译版本的库会出现导入时死锁无报错的情况。
- 排查PyCharm调试器冲突:PyCharm Edu 4.0.2属于较旧版本,对Python 3.6的调试器支持存在已知的导入钩子冲突问题,调试模式下PyCharm会注入自定义的导入逻辑,和部分库的延迟导入逻辑冲突导致无响应。
解决办法
- 修复依赖版本匹配:卸载当前的numpy、scipy、filterpy,重新安装适配Python 3.6的版本,执行命令:
pip uninstall -y numpy scipy filterpy pip install numpy==1.19.5 scipy==1.5.4 filterpy==1.4.5
- 调整PyCharm调试配置:打开PyCharm的运行/调试配置,进入「Python Debugger」设置页,勾选「Gevent compatible」选项,同时禁用调试配置中的「Run with Python Console」选项,避免调试器注入的钩子和库导入逻辑冲突。
- 替换导入逻辑:如果上述方案都无效,可以直接提取
Q_discrete_white_noise的实现代码到本地项目中,该函数本身逻辑独立无额外深度依赖,可完全替代filterpy的导入,避免触发全量库导入的阻塞问题。
内容的提问来源于stack exchange,提问作者Ahadu Tsegaye Abebe
相关产品推荐
相关产品推荐

