我的文件夹结构是
proj/
__init__.py
celery_app.py
tasks.py
我的celery_app看起来像
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
和我的tasks.py看起来像是
from __future__ import absolute_import, unicode_literals
from celery_app import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
当我转到命令行并运行
时 celery -A proj worker --app=proj.celery_app:app -l info
我收到错误
" ImportError:没有名为celery_app"
的模块
当我从
切换时来自celery_app导入应用
到
<。>来自.celery_app导入应用
然后它的作品!但是当我尝试从python shell中的任务import *运行时,我得到了
ValueError:在非包中尝试相对导入
但是如果我回去取走前面的话。在celery_app前面,我可以成功导入它。为什么会发生这种情况,我需要更改为每个脚本导入成功运行的方式?
答案 0 :(得分:1)
使用绝对导入绝对是正确的做法。所以你应该继续使用这个导入语句
String msg = "";
for (int i = 2; i < args.length; i++)
{
msg = msg + args[i] + " ";
}
Util.messagePlayer(player, msg);
为了解决在尝试在交互式python会话中导入时遇到的问题,您应该在包含 我已将您的代码复制到我的机器上并完成了我上面的建议并且工作正常。from .celery_app import app
的同一目录中启动会话,然后执行:< / p>
proj
答案 1 :(得分:0)
运行这些命令:
cd proj
celery -A proj worker --app=celery_app:app -l info
要正确运行python脚本,您必须位于该脚本文件夹中。这就是你得到这个错误的原因
ImportError:没有名为celery_app的模块
答案 2 :(得分:-1)
你可以尝试在$ PYTHONPATH变量中添加路径。