【问题标题】:app.autodiscover_tasks() TypeError: autodiscover_tasks() missing 1 required positional argument: 'packages'app.autodiscover_tasks() 类型错误:autodiscover_tasks() 缺少 1 个必需的位置参数:'packages'
【发布时间】:2020-11-20 10:38:23
【问题描述】:

我正在尝试在我的 django 应用程序中使用 celery。但是,我遇到了一个错误,所以我从我正在关注的书中复制了代码(以 Django 3 为例)。现在,当我运行python manage.py makemigrations 命令时,我得到了这个错误:

app.autodiscover_tasks() TypeError: autodiscover_tasks() missing 1 required positional argument: 'packages'

这是我的celery.py,错误是:

import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

app = Celery('myshop')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks()

这是我的完整错误:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\Dell\Desktop\Django\online-shop\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "C:\Users\Dell\Desktop\Django\online-shop\venv\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    settings.INSTALLED_APPS
  File "C:\Users\Dell\Desktop\Django\online-shop\venv\lib\site-packages\django\conf\__init__.py", line 83, in __getattr__
    self._setup(name)
  File "C:\Users\Dell\Desktop\Django\online-shop\venv\lib\site-packages\django\conf\__init__.py", line 70, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\Dell\Desktop\Django\online-shop\venv\lib\site-packages\django\conf\__init__.py", line 177, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\Dell\Desktop\Django\online-shop\myshop\myshop\__init__.py", line 2, in <module>
    from .celery import app as celery_app
  File "C:\Users\Dell\Desktop\Django\online-shop\myshop\myshop\celery.py", line 10, in <module>
    app.autodiscover_tasks()
TypeError: autodiscover_tasks() missing 1 required positional argument: 'packages'

有什么问题?

【问题讨论】:

  • celery 的版本是多少?
  • 我刚刚安装了它,所以它是最新的。
  • 我认为最新的没有任何问题。请添加完整的错误回溯
  • 我已经编辑了问题
  • 我怀疑您使用的不是最新版本。通过 celery --version 命令查看版本。如果你得到 5.X 你很好

标签: python django celery


【解决方案1】:

看起来您使用的是 Celery 版本 3.x app.autodiscover_tasks() 仅适用于版本 4.x

尝试使用:

from django.apps import apps
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])

【讨论】:

  • 我做到了。但是,现在我收到另一个错误消息:ModuleNotFoundError: No module named 'celery.task'。我该如何解决这个问题?
猜你喜欢
  • 2019-11-09
  • 2022-01-11
  • 1970-01-01
  • 2018-09-12
  • 2021-08-05
  • 2021-07-06
  • 2021-08-05
  • 2017-07-23
相关资源
最近更新 更多