Django执行CSV导入脚本时出现ModuleNotFoundError报错求助
Django脚本导入模型报错ModuleNotFoundError的解决办法
问题背景
我有一个名为localassets的Django项目,包含assetlist应用。项目根目录(与manage.py同级)下有scripts目录,存放着读取CSV数据的load_csv.py脚本:
load_csv.py代码
import csv from localassets.assetlist.models import BusinessUnit, Branch def run(): with open('scripts/testing_import.csv') as file: reader = csv.reader(file) next(reader) for row in reader: print(row) bu_csv = row[0] bu = BusinessUnit.objects.get(bu=bu_csv) branch_csv = row[1] branch = Branch.objects.get(bu=bu, location_code=branch_csv) print(bu, branch)
项目settings.py的INSTALLED_APPS配置:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'assetlist.apps.AssetlistConfig', 'django_tables2', 'django_filters', 'widget_tweaks', 'django_bootstrap_icons', 'django_extensions', ]
assetlist/apps.py内容:
from django.apps import AppConfig class AssetlistConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'assetlist'
执行命令python manage.py runscript load_csv时,出现以下错误:
ModuleNotFoundError: No module named 'localassets.assetlist' Cannot import module 'scripts.load_csv': No module named 'localassets.assetlist'. No (valid) module for script 'load_csv' found Try running with a higher verbosity level like: -v2 or -v3 CommandError: An error has occurred running scripts. See errors above.
已完成数据库迁移但问题依旧,项目目录结构如下:
- 项目根目录
- localassets/(项目配置目录)
- init.py
- settings.py
- urls.py
- ...
- assetlist/(应用目录)
- migrations/
- init.py
- apps.py
- models.py
- ...
- scripts/
- load_csv.py
- testing_import.csv
- manage.py
- localassets/(项目配置目录)
问题原因
导入路径错误:assetlist应用直接位于项目根目录,与localassets配置目录同级,并非在localassets目录内,因此导入语句中的localassets前缀是多余的,导致Python无法找到对应的模块。
修复步骤
- 修正导入语句
修改load_csv.py中的导入代码,去掉localassets前缀:
# 替换原导入语句 from assetlist.models import BusinessUnit, Branch
确保scripts目录可被识别
在scripts目录下创建空的__init__.py文件,让Django的runscript命令能将其识别为Python模块。重新执行脚本
再次运行命令:
python manage.py runscript load_csv
额外验证点
- 确认
assetlist应用在INSTALLED_APPS中的注册(当前配置assetlist.apps.AssetlistConfig是正确的)。 - 确认
testing_import.csv的路径正确(脚本中使用的相对路径scripts/testing_import.csv是以manage.py为基准,无需修改)。
内容的提问来源于stack exchange,提问作者Declan Morgan
相关产品推荐
相关产品推荐

