Django的脚本:没有(有效)模块的脚本'文件名'发现

时间:2016-09-05 01:45:38

标签: python django

我尝试使用Django-extension RunScript从Django shell运行脚本。我以前做过这个,但它拒绝承认我的新脚本:

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript fill_in_random_variants
No (valid) module for script 'fill_in_random_variants' found
Try running with a higher verbosity level like: -v2 or -v3

运行任何其他脚本时运行正常:

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript fill_in_variants
Success! At least, there were no errors.

我已经仔细检查过该文件是否存在,包括将其重命名为其他内容。我还尝试使用不存在的脚本名称运行命令:

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript thisfiledoesntexist
No (valid) module for script 'thisfiledoesntexist' found
Try running with a higher verbosity level like: -v2 or -v3

并且错误是一样的。

为什么RunScript不能找到我的文件?

3 个答案:

答案 0 :(得分:6)

RunScript有令人困惑的错误消息。当它无法找到脚本以及脚本中是否存在导入错误时,它会产生相同的错误。

这是一个产生错误的示例脚本:

import nonexistrentpackage

def run():
    print("Test")

该示例对脚本有唯一的要求,即run函数。

将此保存为test_script.py在脚本文件夹(例如project root/your app/scripts/test_script.py)中。然后尝试运行它:

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript test_script
No (valid) module for script 'test_script' found
Try running with a higher verbosity level like: -v2 or -v3

与找不到文件的错误相同。现在取消对导入行的注释,然后再试一次:

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript test_script
Test

据我所知,区分错误的唯一方法是使用verbose(-v2)命令行选项,然后查看返回的 first (向上滚动)错误:< / p>

(env) mint@mint-VirtualBox ~/GP/GP $ python manage.py runscript test_script -v2
Check for www.scripts.test_script
Cannot import module 'www.scripts.test_script': No module named 'nonexistrentpackage'.
Check for django.contrib.admin.scripts.test_script
Cannot import module 'django.contrib.admin.scripts.test_script': No module named 'django.contrib.admin.scripts'.
Check for django.contrib.auth.scripts.test_script
Cannot import module 'django.contrib.auth.scripts.test_script': No module named 'django.contrib.auth.scripts'.
Check for django.contrib.contenttypes.scripts.test_script
Cannot import module 'django.contrib.contenttypes.scripts.test_script': No module named 'django.contrib.contenttypes.scripts'.
Check for django.contrib.sessions.scripts.test_script
Cannot import module 'django.contrib.sessions.scripts.test_script': No module named 'django.contrib.sessions.scripts'.
Check for django.contrib.messages.scripts.test_script
Cannot import module 'django.contrib.messages.scripts.test_script': No module named 'django.contrib.messages.scripts'.
Check for django.contrib.staticfiles.scripts.test_script
Cannot import module 'django.contrib.staticfiles.scripts.test_script': No module named 'django.contrib.staticfiles.scripts'.
Check for django_extensions.scripts.test_script
Cannot import module 'django_extensions.scripts.test_script': No module named 'django_extensions.scripts'.
Check for scripts.test_script
Cannot import module 'scripts.test_script': No module named 'scripts'.
No (valid) module for script 'test_script' found

我们可以看到关键线:

No module named 'nonexistrentpackage'.

错误的共性似乎是因为扩展程序使用import运行脚本。如果它首先使用os.path.isfile检查文件是否存在会更加明智,如果没有找到,则会发出更明智的错误消息。

答案 1 :(得分:1)

另一个需要注意的重要事项

不应给出 .py,只需提供文件名(脚本)

 python3 manage.py runscript -v3 scriptname;

答案 2 :(得分:0)

我有同样的问题。我花了一个小时来找出问题所在。但是,解决方案非常简单。就我而言,我在我的脚本中导入了以下模块。

from openpyxl import Workbook
from openpyxl.styles import Font
from openpyxl.utils import get_column_letter

我使用的是virtualenv,我忘了安装 openpyxl

我已经使用pip安装了opnepyxl。

  

pip install openpyxl

因此,请确保已安装所有导入的模块。

希望这会有所帮助。