使用Python NLP模块训练数据集时遇dill._dill无log属性错误
问题描述
在使用Python的nlp模块训练数据集时遇到以下错误:
File "/usr/local/lib/python3.9/site-packages/nlp/utils/py_utils.py", line 297, in save_code dill._dill.log.info("Co: %s" % obj)
AttributeError: module 'dill._dill' has no attribute 'log'
我注意到有类似的找不到'extend'、'stack'属性的问题,想确认这是否属于同类情况。已经尝试执行pip install dill --upgrade但没有效果,在Python命令行执行dir(dill)也没找到'log'属性。
当前环境信息:
- 系统:Mac
- Python版本:3.9.15
- 相关包版本:dill 0.3.6、nlp 0.4.0、pyarrow 10.0.1
完整堆栈跟踪:
File "/usr/local/lib/python3.9/site-packages/nlp/arrow_dataset.py", line 902, in map cache_file_name = self._get_cache_file_path(function, cache_kwargs) File "/usr/local/lib/python3.9/site-packages/nlp/arrow_dataset.py", line 756, in _get_cache_file_path function_bytes = dumps(function) File "/usr/local/lib/python3.9/site-packages/nlp/utils/py_utils.py", line 278, in dumps dump(obj, file) File "/usr/local/lib/python3.9/site-packages/nlp/utils/py_utils.py", line 271, in dump Pickler(file).dump(obj) File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 394, in dump StockPickler.dump(self, obj) File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 487, in dump self.save(obj) File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 388, in save StockPickler.save(self, obj, save_persistent_id) File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 560, in save f(self, obj) # Call unbound method with explicit self File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 1824, in save_function _save_with_postproc(pickler, (_create_function, ( File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 1070, in _save_with_postproc pickler.save_reduce(*reduction, obj=obj) File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 692, in save_reduce save(args) File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 388, in save StockPickler.save(self, obj, save_persistent_id) File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 560, in save f(self, obj) # Call unbound method with explicit self File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 901, in save_tuple save(element) File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 388, in save StockPickler.save(self, obj, save_persistent_id) File "/usr/local/Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py", line 560, in save f(self, obj) # Call unbound method with explicit self File "/usr/local/lib/python3.9/site-packages/nlp/utils/py_utils.py", line 297, in save_code dill._dill.log.info("Co: %s" % obj) AttributeError: module 'dill._dill' has no attribute 'log'
解决方案
这确实属于版本兼容性问题——你使用的nlp模块(0.4.0版本)依赖的dill版本过旧,而dill在0.3.6版本中已经移除了dill._dill.log这个内部属性,导致调用失败。
解决步骤:
- 降级dill到与nlp 0.4.0兼容的版本,比如0.3.1.1:
pip install dill==0.3.1.1 - 如果降级后仍有问题,建议迁移到
datasets库(原nlp模块已更名并停止维护,最新功能都在datasets中):pip uninstall nlp pip install datasets - 验证修复:执行
dir(dill._dill)查看是否存在log属性,或重新运行训练代码确认错误消失。
补充:那些找不到'extend'、'stack'属性的问题,本质也是不同版本间的API变更导致的兼容性问题,和你的情况完全一致,都是依赖库内部API被移除/修改,而调用方未同步更新。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

