Python3.6运行Django1.11.10应用时出现ProhibitNullCharactersValidator导入报错
问题根因
- 本次报错属于典型的依赖版本错配,与业务代码逻辑无关。
- 完整触发逻辑:
ProhibitNullCharactersValidator是Django 2.0版本才新增的内置校验类,你当前固定使用的Django 1.11.10版本中不存在该类,无法被直接导入。- 你项目中的
djangorestframework-datatables==0.4.0依赖DRF(djangorestframework)包,但requirements.txt中未固定DRF的版本,pip安装时会自动拉取适配高版本Django的最新DRF发行版。 - 最新版DRF源码中直接硬导入了上述仅高版本Django才存在的
ProhibitNullCharactersValidator,最终在导入链路触发连锁ImportError。
解决步骤
- 卸载虚拟环境中当前安装的不兼容高版本DRF:
执行命令:pip uninstall djangorestframework -y - 安装与Django 1.11完全兼容的DRF固定版本:
适配版本为djangorestframework==3.9.4(该版本是最后一个正式支持Django 1.11的DRF发行版),执行安装命令:pip install djangorestframework==3.9.4 - 将固定版本补入项目requirements.txt,避免后续重建环境时再次触发自动升级拉取不兼容版本的问题,补入内容:
djangorestframework==3.9.4 - 兼容性校验:你当前使用的
django-rest-swagger==2.2.0与上述指定版本DRF完全兼容,无需额外调整版本。
额外提示:原requirements.txt中
django-settings-export ==1.2.1的写法在等号前后存在空格,部分pip版本会出现依赖识别失败问题,建议调整为无空格格式django-settings-export==1.2.1。
内容的提问来源于stack exchange,提问作者Eddy
相关产品推荐
相关产品推荐

