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

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

问题原因

导入路径错误:assetlist应用直接位于项目根目录,与localassets配置目录同级,并非在localassets目录内,因此导入语句中的localassets前缀是多余的,导致Python无法找到对应的模块。

修复步骤

  1. 修正导入语句
    修改load_csv.py中的导入代码,去掉localassets前缀:
# 替换原导入语句
from assetlist.models import BusinessUnit, Branch
  1. 确保scripts目录可被识别
    在scripts目录下创建空的__init__.py文件,让Django的runscript命令能将其识别为Python模块。

  2. 重新执行脚本
    再次运行命令:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:45:02