You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下Django项目报错ImportError: cannot import name 'DEFAULT_CURRENCY' from 'moneyed'

报错解决方案

你遇到的导入错误是py-moneyed版本与django-money版本不兼容导致的:py-moneyed v3.0及以上版本移除了顶层导出的DEFAULT_CURRENCY常量,改用get_default_currency()函数获取默认货币,而你安装的django-money版本仍然依赖旧版py-moneyed的导出规则。
可选用以下任意一种方案修复:

  • 方案1:降级py-moneyed到兼容版本
    执行命令:
pip install py-moneyed==2.0

建议将项目依赖全部冻结到requirements.txt文件中,后续部署直接用pip install -r requirements.txt安装,可避免多环境依赖版本不一致的问题。

  • 方案2:兼容新版py-moneyed无需降级
    在settings.py中导入djmoney相关配置的代码前,提前添加兼容代码:
from moneyed import get_default_currency, CURRENCIES, DEFAULT_CURRENCY_CODE
DEFAULT_CURRENCY = get_default_currency()
定时任务实现方案

以下方案都可以满足「每2小时执行一次更新数据库」、「每日指定时间执行一次」的需求:

  • 方案1:使用已安装的django-crontab
    在settings.py中添加定时任务配置:
CRONJOBS = [
    # 每2小时执行一次数据库更新,替换为你实际的任务函数路径
    ('0 */2 * * *', '你的应用名.tasks.update_db'),
    # 每天凌晨1点执行每日任务,可自行修改时间参数
    ('0 1 * * *', '你的应用名.tasks.daily_task'),
]

配置完成后执行python manage.py crontab add即可将任务自动写入系统crontab规则中,无需额外运行常驻服务,适合轻量定时需求。

  • 方案2:使用已安装的django-background-tasks
    给任务函数加上装饰器即可设置执行规则,自带任务执行日志、失败重试能力,需要单独运行常驻进程处理任务:
python manage.py process_tasks
  • 方案3:直接使用Ubuntu原生crontab
    编写Django自定义管理命令,在系统crontab中直接添加执行规则,无需依赖额外第三方Django包,稳定性最高。

内容的提问来源于stack exchange,提问作者eeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:27:02