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

Django运行一次性自定义脚本时xlrd未定义错误的排查与解决

解决Django Shell执行自定义脚本时的xlrd未定义/文件找不到问题

问题场景

我需要在Django项目里运行一个一次性脚本,用来读取Excel文件并写入数据库,执行命令:

python manage.py shell < polygon/run.py

时遇到了NameError: name 'xlrd' is not defined的报错,排查后发现实际是文件路径的问题。

报错详情

Error: File "manage.py", line 15, in <module> execute_from_command_line(sys.argv)
File "/home/jurabek/Project/hrm/.venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute()
File "/home/jurabek/Project/hrm/.venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/jurabek/Project/hrm/.venv/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options)
File "/home/jurabek/Project/hrm/.venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options)
File "/home/jurabek/Project/hrm/.venv/lib/python3.7/site-packages/django/core/management/commands/shell.py", line 92, in handle exec(sys.stdin.read())
File "<string>", line 17, in <module>
File "<string>", line 10, in run
NameError: name 'xlrd' is not defined

我的初始脚本代码

polygon/run.py的初始代码:

from apps import xlrd
loc = ('users.xlsx')
def run():
    workbook = xlrd.open_workbook(loc)
    sheet = workbook.sheet_by_index(0)
    print(sheet.cell_value(0, 0))
run()

项目目录结构

.venv
apps/ -- 所有业务应用
polygon/
    run.py
manage.py
settings/

问题排查与解决方法

  1. 先修正xlrd的导入错误:
    初始代码里from apps import xlrd是错误的,xlrd是第三方依赖库,并非apps下的模块,应该改为:

    import xlrd
    

    不过这一步只是修正了语法问题,执行后依然会报错,因为还有更核心的文件路径问题。

  2. 核心问题:文件路径不匹配
    当通过manage.py shell执行脚本时,程序的工作目录是项目根目录(也就是manage.py所在的目录),而我的users.xlsx文件实际是放在polygon目录下的,直接写users.xlsx会导致程序在根目录找不到这个文件,进而触发后续的连锁错误(看起来像是xlrd未定义,但实际是文件找不到引发的问题)。

  3. 最终解决方案
    将文件路径修改为相对于项目根目录的路径:

    import xlrd
    # 修正文件路径为polygon目录下的文件
    loc = ('polygon/users.xlsx')
    def run():
        workbook = xlrd.open_workbook(loc)
        sheet = workbook.sheet_by_index(0)
        print(sheet.cell_value(0, 0))
    run()
    

    再次执行python manage.py shell < polygon/run.py,脚本就能正常读取Excel文件并运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:57:45