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
据我所知,区分错误的唯一方法是使用详细 (-v2) 命令行选项,然后查看返回的 first(向上滚动)错误:
(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 检查文件是否存在,如果没有找到,则抛出更明智的错误消息。