生产环境django_celery_beat添加任务时pymemcache模块缺失问题
问题核心
生产环境访问/admin/django_celery_beat/periodictask/add/时触发ModuleNotFoundError: No module named 'pymemcache',但已在虚拟环境安装该模块,本地运行正常,缓存配置使用PyMemcacheCache后端。
解决方案
确认模块安装路径与进程Python环境匹配
激活生产环境虚拟环境,执行pip show pymemcache查看安装路径,对比错误日志中的Python路径/opt/jelastic-python311/lib/python3.11/site-packages/,确保pymemcache被安装到进程实际使用的Python环境中。若路径不匹配,说明进程未使用目标虚拟环境。直接在目标Python环境安装pymemcache
若进程使用指定路径的Python(如错误日志中的/opt/jelastic-python311/bin/python),用对应pip直接安装:/opt/jelastic-python311/bin/pip install pymemcache确保模块被安装到错误日志显示的site-packages目录下。
验证Django与Celery进程的运行环境
分别在Django shell和Celery shell中执行import pymemcache,确认两者都能正常导入模块。若其中一个无法导入,说明该进程未使用正确虚拟环境,需调整启动脚本,激活对应虚拟环境后再启动服务。临时切换缓存后端排查问题
暂时将缓存配置改为MemcachedCache(依赖python-memcached模块):'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '10.100.23.95:11211', },若切换后能正常添加任务,说明
PyMemcacheCache的依赖仍存在问题,可尝试指定兼容版本重新安装:pip install pymemcache==4.0.0检查文件权限
确保pymemcache的安装目录及文件拥有Django/Celery进程运行用户的可读权限,避免因权限不足导致模块无法导入。
内容的提问来源于stack exchange,提问作者Dragos

