ModuleNotFoundError:运行celery worker时没有名为“ social.models”的模块

蒿甲醚

我有以下项目结构:

SocialRating
- accounts
-- __init__.py
-- models.py
-- tasks.py

- instagram
-- __init__.py
-- crawler.py

- social
-- __init__.py
-- models.py # Not Django models

- celery_worker.sh

accounts/models.py 包含类:

from instagram.crawler import InstagramCrawler

class SocialProfile(models.Model):
    ...

    def collect_profile_stats(self):
        crawler = InstagramCrawler()
        record_data = crawler.get_profile_stats(self.account_id)

InstagramCrawler该类位于instagram/crawler.py

from social.models import SocialUserData, SocialCommentData, SocialProfileStatsRecordData


class InstagramCrawler(object):
    ...

social/models.py包含简单的数据类:

@dataclass
class SocialUserData(object):
    user_id: str


@dataclass
class SocialCommentData(object):
    social_id: str
    user: SocialUserData
    text: str


@dataclass
class SocialPostStatsRecordData(object):
    post_id: str
    subscribers_count: int
    likes_count: int
    reposts_count: int
    comments_count: int
    post_date: str


@dataclass
class SocialProfileStatsRecordData(object):
    subscribers_count: int

accounts/tasks.py

@app.task(bind=True)
def update_profile_stats(self, social_profile_pk: int):
    social_profile = SocialProfile.objects.get(pk=social_profile_pk)

    logger.info(f'Updating profile stats for {social_profile}')

    social_profile.collect_profile_stats()

celery_worker.sh

#!/usr/bin/env bash

celery -A SocialRating worker -l info

因此,当我运行时celery_worker.sh(从项目的根目录),它会引发:

Signal handler <bound method DjangoFixup.on_import_modules of <celery.fixups.django.DjangoFixup object at 0x106819d30>> raised: ModuleNotFoundError("No module named 'social.models'")
Traceback (most recent call last):
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 82, in on_import_modules
    self.worker_fixup.validate_models()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 120, in validate_models
    self.django_setup()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 116, in django_setup
    django.setup()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/Users/user/src/python/web/SocialRating/accounts/models.py", line 4, in <module>
    from instagram.crawler import InstagramCrawler
  File "/Users/user/src/python/web/SocialRating/instagram/crawler.py", line 7, in <module>
    from social.models import SocialUserData, SocialCommentData, SocialProfileStatsRecordData
ModuleNotFoundError: No module named 'social.models'
Traceback (most recent call last):
  File "/Users/user/src/python/web/SocialRating/.venv/bin/celery", line 10, in <module>
    sys.exit(main())
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
    _main()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
    cmd.execute_from_commandline(argv)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/base.py", line 275, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/celery.py", line 488, in handle_argv
    return self.execute(command, argv)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/celery.py", line 420, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
    return self(*args, **options)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/base.py", line 238, in __call__
    ret = self.run(*args, **kwargs)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/bin/worker.py", line 257, in run
    **kwargs)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/worker/worker.py", line 96, in __init__
    self.app.loader.init_worker()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/loaders/base.py", line 114, in init_worker
    self.import_default_modules()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/loaders/base.py", line 108, in import_default_modules
    raise response
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 82, in on_import_modules
    self.worker_fixup.validate_models()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 120, in validate_models
    self.django_setup()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/celery/fixups/django.py", line 116, in django_setup
    django.setup()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/Users/user/src/python/web/SocialRating/.venv/lib/python3.7/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/Users/user/src/python/web/SocialRating/accounts/models.py", line 4, in <module>
    from instagram.crawler import InstagramCrawler
  File "/Users/user/src/python/web/SocialRating/instagram/crawler.py", line 7, in <module>
    from social.models import SocialUserData, SocialCommentData, SocialProfileStatsRecordData
ModuleNotFoundError: No module named 'social.models'

但是当我InstagramCrawler直接从django命令使用时,它可以正常工作:

class Command(BaseCommand):

    def handle(self, *args, **options):
        self.test_account_followers_count()


    def test_account_followers_count(self):
        crawler = InstagramCrawler()
        print(crawler.get_subscribers_count('someacc'))

为什么?

威尔·基林

social.models从中运行Celery时,似乎未在加载模块celery_worker.sh

尝试PYTHONPATH在运行之前显式设置celery_worker.sh例如:

export PYTHONPATH=.; ./celery_worker.sh 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ModuleNotFoundError:在虚拟环境中运行服务器时,没有名为“ django”的模块

ModuleNotFoundError:没有名为“ buildozer”的模块

ModuleNotFoundError:没有名为“ matplotlib”的模块

ModuleNotFoundError:没有名为“ BaseHTTPServer”的模块

ModuleNotFoundError:没有名为“ Cython”的模块

Celery Worker错误:ImportError没有名为celery的模块

运行uWSGI时没有名为flask的模块

从Python运行QGIS时没有名为sip的模块

ModuleNotFoundError:没有名为“模型”的模块

Django未运行:ModuleNotFoundError:没有名为“ encodings”的模块

Celery worker ImportError:没有名为“项目”的模块

ModuleNotFoundError:没有名为“ camelcase”的模块

ModuleNotFoundError:没有名为“ jieba”的模块

ModuleNotFoundError:没有名为“ fastai”的模块

ModuleNotFoundError:没有名为“ Src”的模块-当我运行Pytest时

ModuleNotFoundError:没有名为“ knox”的模块

ModuleNotFoundError:没有名为“项目”的模块

运行tox时“没有名为pip的模块”

ModuleNotFoundError:运行docker映像时,没有名为“ turbodbc”的模块

Docker-没有名为'celery_worker'的模块

ModuleNotFoundError:没有名为“ pynput”的模块

ModuleNotFoundError:导入模块时没有名为“ x”的模块

ModuleNotFoundError: 没有名为“bootstrapform”的模块

ModuleNotFoundError: 没有名为“src”的模块

ModuleNotFoundError:导入mysql时没有名为“_version”的模块

ModuleNotFoundError: 没有名为“tensorboard”的模块

ModuleNotFoundError: 没有名为“model”的模块

ModuleNotFoundError:没有名为“dmidecode”的模块

ModuleNotFoundError:没有名为“dbutils”的模块