Django-extension runscript 脚本没有(有效)模块

Django-extension runscript No (valid) module for script

我正在尝试创建一个脚本,它将使用从文本文件中提取的信息填充我的模型 families。 这是我在Whosebug中的第一个post,如果问题表达不当或格式不正确,请多多包涵,抱歉。

Django V 1.9 和 运行宁 Python 3.5
已安装 Django 扩展

这是我的模型:它在一个名为 browse

的应用程序中
from django.db import models
from django_extensions.db.models import TimeStampedModel


class families(TimeStampedModel):
     rfam_acc = models.CharField(max_length=7)
     rfam_id = models.CharField(max_length=40)
     description = models.CharField(max_length=75)
     author = models.CharField(max_length=50)
     comment = models.CharField(max_length=500)
     rfam_URL = models.URLField()

这是我的脚本familiespopulate.py。定位于PROJECT_ROOT/scripts目录。

import csv
from browse.models import families

file_path =       "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"

def run(file_path):
    listoflists = list(csv.reader(open(file_path, 'rb'), delimiter='\t'))
    for row in listoflists:
        families.objects.create(
                rfam_acc=row[0],
                rfam_id=row[1],
                description=row[3],
                author=row[4],
                comment=row[9],
        )

当从终端 i 运行:

python manage.py runscript familiespopulate

它returns:

No (valid) module for script 'familiespopulate' found
Try running with a higher verbosity level like: -v2 or -v3

问题一定出在导入模型 families 上,我是 django 的新手,我在 Whosebug 上或其他任何在线地方都找不到任何解决方案。 这就是我寻求您帮助的原因!

你知道模型应该怎么导入吗? 或者......我做错了什么。

重要的信息是脚本 运行s 如果我修改它以打印出参数,而不是在族中创建对象。

为了您的信息和好奇心,我还将 post 此处摘录我正在使用的文本文件。

RF00001 5S_rRNA 1302    5S ribosomal RNA    Griffiths-Jones SR, Mifsud W, Gardner PP    Szymanski et al, 5S ribosomal database, PMID:11752286   38.00   38.00   37.90   5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilises 5S rRNA until it is required for transcription.    NULL    cmbuild -F CM SEED  cmcalibrate --mpi CM    cmsearch --cpu 4 --verbose --nohmmonly -T 24.99 -Z 549862.597050 CM SEQDB   712 183439  0   0   Gene; rRNA; Published; PMID:11283358    7946    0       0.59496 -5.32219    1600000 213632  305 119 1   -3.78120    0.71822 2013-10-03 20:41:44 2016-04-21 23:07:03

这是第一行,从 listoflists 中提取的结果是:

RF00002
5_8S_rRNA
5.8S ribosomal RNA
Griffiths-Jones SR, Mifsud W
5.8S ribosomal RNA (5.8S rRNA) is a component of the large subunit of    the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation [2]. It is also known to form covalent linkage to the p53 tumour suppressor protein [3]. 5.8S rRNA is also found in archaea.

尝试将空文件 __init__.py(双下划线)添加到您的 /scripts 文件夹中,然后 运行 使用:

python manage.py runscript scipts.familiespopulate

除了添加 init.py 之外,您不应该在 运行 方法中传递任何参数。

def run():
     <your code goes here>

感谢有用的评论。 我以这种方式修改了我的代码:

import csv
from browse.models import families


def run():
   file_path =   "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"
   listoflists = list(csv.reader(open(file_path, 'r'),delimiter='\t'))
print(listoflists)
for row in listoflists:
    families.objects.create(
                rfam_acc=row[0],
                rfam_id=row[1],
                description=row[3],
                author=row[4],
                comment=row[9],
    )

这就是全部。现在它工作顺利。 我想向所有人确认我的文件:familiespopulate.py 与文件 init.py

在文件夹脚本中

当我输入

时,问题似乎得到了解决
file_path = "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"

在 运行 函数内,从 运行(file_path) 中删除参数 file_path。

我的代码的另一个修改是 open(file_path, 'r') 中的参数 r,在它被 open(file_path, 'rb') 之前应该对应读取二进制文件。

我也遇到了完全相同的错误,我尝试了上面的所有解决方案,但遗憾的是对我没有用。然后我意识到我的错误,我找到了。

在脚本文件中(在 script/ 文件夹中)我为函数使用了不同的名称,应该命名为 'run'。所以,如果你收到这个错误,请确保你也检查了它。

Here you can read more about "runscript"