Django REST Framework加载Razorpay支付类报No module named 'razorpay'求助
问题原因
你的目标支付类存放在 sales.payment.{code} 子模块中(比如razorpay对应的类在sales.payment.razorpay模块下),但当前的调用逻辑是直接从sales.payment包中获取类,而sales.payment默认没有自动导入子模块内的类,因此触发导入错误。
修复方案
方案一:调整导入路径(推荐,无需额外维护)
直接修改provider_factory中调用get_class的代码,将子模块路径拼入导入参数:
# 原错误代码 # ProviderClass = get_class('sales.payment.', snake2camel(code) + 'Provider') # 修正后代码 ProviderClass = get_class(f'sales.payment.{code}', snake2camel(code) + 'Provider')
该方案会自动匹配你的项目结构,先加载对应支付方式的子模块,再从子模块中获取目标类,后续新增支付方式无需修改其他配置。
方案二:在支付包初始化文件中提前导入类
如果不想调整调用逻辑,可以在sales/payment/__init__.py中提前导入所有支付类:
from .razorpay import RazorpayProvider from .stripe import StripeProvider # 其他支付方式类依次导入
该方案无需修改原有工厂方法代码,但每次新增支付方式都需要手动更新__init__.py,维护成本更高。
额外注意
你原有代码中传入的模块路径sales.payment.末尾带了多余的点,部分Python版本会因此触发导入异常,修正后请确保路径末尾无多余标点。
内容的提问来源于stack exchange,提问作者user15361826
相关产品推荐
相关产品推荐

