升级nltk到3.6.2后cannot import name 'find_dir'报错如何解决
NLTK 3.6.2版本ImportError修复方案
根因说明
该报错是因为NLTK 3.6及以上版本已将find_dir接口从nltk.internals模块中移除,但内置的nltk.parse.malt模块仍保留了旧版本的导入逻辑,导致导入失败。
可用修复方案
方案1:修改malt.py源码适配新版接口
- 打开报错路径下的文件:
C:\Program Files\Python39\lib\site-packages\nltk\parse\malt.py - 将第18行的导入语句修改为:
from nltk.internals import find_file, find_jars_within_path- 把文件中所有调用
find_dir()的代码,替换为find_file(原参数, path_is_dir=True),即可完全替代原有功能。
- 打开报错路径下的文件:
方案2:回退到兼容的NLTK版本
不需要修改任何源码,直接执行命令安装3.5版本即可:pip install nltk==3.5方案3:手动添加兼容接口
打开C:\Program Files\Python39\lib\site-packages\nltk\internals.py,在文件末尾添加如下代码:def find_dir(resource_name, env_vars=(), search_path=(), verbose=False): return find_file(resource_name, env_vars, search_path, verbose, path_is_dir=True)即可让旧的导入逻辑正常生效。
注意:如果你使用的是Python虚拟环境,需要修改对应虚拟环境路径下的site-packages内的文件,不要错误修改全局Python的文件。
内容的提问来源于stack exchange,提问作者swordfish81
相关产品推荐
相关产品推荐

