我尝试使用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不能找到我的文件?
答案 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
因此,请确保已安装所有导入的模块。
希望这会有所帮助。