模型 class xxx 未显式声明 app_label 并且不在 INSTALLED_APPS 中的应用程序中

Model class xxx doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

我正在尝试将 scrapydjango 整合。我是 django 的新手,我不知道自己做错了什么。 我已阅读之前的问题,但 none 的答案似乎解决了我的问题。

我一直收到这个错误

raise RuntimeError( RuntimeError: Model class emails.models.Email doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

email_spider.py

from scrapyy.items import EmailItem

class firstSpider(scrapy.Spider): 
    name = "emails"
    ...
    def parse(self, response):
       ...
        item = EmailItem()
        item['email'] = text_list2

       ...
process = CrawlerProcess()
process.crawl(firstSpider)
process.start()

item.py

import scrapy
from scrapy_djangoitem import DjangoItem
from emails.models import Email

class EmailItem(DjangoItem):
    django_model = Email

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'scrapyy',
    'emails',
]

emails/models.py

from django.db import models

# Create your models here.
class Email(models.Model):
    email = models.CharField(max_length=100)

编辑

> Traceback (most recent call last):   File
> "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 197, in _run_module_as_main
>     return _run_code(code, main_globals, None,   File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 87, in _run_code
>     exec(code, run_globals)   File "C:\Users\FacilOrdi\Desktop\venv\Scripts\scrapy.exe\__main__.py", line
> 7, in <module>   File
> "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\cmdline.py",
> line 144, in execute
>     cmd.crawler_process = CrawlerProcess(settings)   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 280, in __init__
>     super().__init__(settings)   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 152, in __init__
>     self.spider_loader = self._get_spider_loader(settings)   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 146, in _get_spider_loader
>     return loader_cls.from_settings(settings.frozencopy())   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 67, in from_settings
>     return cls(settings)   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 24, in __init__
>     self._load_all_spiders()   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 51, in _load_all_spiders
>     for module in walk_modules(name):   File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\utils\misc.py",
> line 88, in walk_modules
>     submod = import_module(fullpath)   File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py",
> line 127, in import_module
>     return _bootstrap._gcd_import(name[level:], package, level)   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import   File
> "<frozen importlib._bootstrap>", line 1007, in _find_and_load   File
> "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked 
> File "<frozen importlib._bootstrap>", line 680, in _load_unlocked  
> File "<frozen importlib._bootstrap_external>", line 850, in
> exec_module   File "<frozen importlib._bootstrap>", line 228, in
> _call_with_frames_removed   File "C:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\spiders\email_spider.py",
> line 7, in <module>
>     from scrapyy.items import EmailItem   File "C:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\items.py", line
> 8, in <module>
>     from emails.models import Email   File "C:\Users/FacilOrdi/Desktop/scraping\emails\models.py", line 4, in
> <module>
>     class Email(models.Model):   File "c:\users\facilordi\desktop\venv\lib\site-packages\django\db\models\base.py",
> line 113, in __new__
>     raise RuntimeError( RuntimeError: Model class emails.models.Email doesn't declare an explicit app_label and isn't in an application in
> INSTALLED_APPS.

here is the structure of my project

为了解决这个问题,我按照@WillemVanOnsem 的建议创建了一个管理命令

emails/management/commands/mycommand

import os
import sys

from django.core.management.base import BaseCommand
from scrapy import cmdline


class Command(BaseCommand):
    def handle(self, *args, **options):
        sys.path.insert(0, 'C:/Users/FacilOrdi/Desktop/scraping/scrapyy')
        os.environ['SCRAPY_SETTINGS_MODULE'] = 'scrapyy.scrapyy.settings'
        cmdline.execute("scrapy crawl emails".split())

在命令提示符下我 运行 :

python manage.py mycommand