【问题标题】:Django's runscript: No (valid) module for script 'filename' foundDjango 的运行脚本:找不到脚本“文件名”的(有效)模块
【发布时间】:2016-09-05 01:45:37
【问题描述】:

我正在尝试使用 Django 扩展 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 找不到我的文件?

【问题讨论】:

    标签: python django


    【解决方案1】:

    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 检查文件是否存在,如果没有找到,则抛出更明智的错误消息。

    【讨论】:

      【解决方案2】:

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

      不应该给出.py,只是文件名(脚本)

       python3 manage.py runscript -v3 scriptname;
      

      【讨论】:

      • 荣誉。放弃 .py 对我有用。
      【解决方案3】:

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

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

      我使用的是 virtualenv,但忘记安装 openpyxl

      我已经使用 pip 安装了 opnepyxl。

      pip install openpyxl

      所以请确保安装了所有导入的模块。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 2017-05-14
        • 2018-09-07
        • 2020-08-07
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        相关资源
        最近更新 更多