繁体   English   中英

RQ-ImportError:没有名为XXX的模块

[英]RQ - ImportError: No module named XXX

我与一名RQ工人有问题。

这是我的应用程序的结构:

app/
    run.py
    project/
        __init__.py
        clock.py
        views.py
        worker.py
        controllers/
           __init__.py
           leads_fb.py

运行我的应用程序后,时钟就会执行,这是代码:

from apscheduler.schedulers.background import BackgroundScheduler
from rq import Queue, get_current_job
from rq.job import Job 
from worker import conn
from controllers import leads_fb
import logging
import os


q = Queue(connection=conn)
sched = BackgroundScheduler()

def enque_jobs():
    info = '1aooEOTBQz1pAW915-JonL3Jh2mhclR5EZTHGotFBe7s||blah blah blah'
    job = q.enqueue(leads_fb.prueba, info)  
    print 'This job is run every 3 seconds.'

if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
    sched.add_job(enque_jobs, 'interval', seconds=3)
    sched.start()

log = logging.getLogger('apscheduler.executors.default')
# log.setLevel(logging.INFO)  # DEBUG

# fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
h = logging.StreamHandler()
# h.setFormatter(fmt)
log.addHandler(h)
then clock enqueues jobs with the rq worker which is worker.py:

import os

import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

排队作业正在执行的函数是controllers / leads_fb.py:

from wksh import init_wksh, get_last_row, write_in_cell

def prueba(info):
    print 'aaaaa'
    info = info.split('||')
    id_client = info[0]
    str_prueba = info[1]
    wksh = init_wksh(id_client)
    print wksh
    row = get_last_row(wksh)

    write_in_cell(wksh,'A'+str(row),str_prueba)
    print 'funciona  ' + str(row)

当我使用根目录中的run.py文件运行应用程序时,出现以下错误:ImportError:没有名为project.controllers.leads_fb的模块

我的run.py文件具有以下代码:

from project import app
from project import worker
from project import clock

if __name__ == "__main__":
    app.run(debug=True,host='127.0.0.1', port=1234)

而我的app / project / init.py文件有这个

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

from . import views
from . import worker
from . import clock

请帮忙!! 我已经坚持了一个星期,无法解决这个问题。 我已经阅读了其他线程问题,并开始了解它必须与PYTHONPATH做一些事情,该问题将我的模块目录指向我的rq worker,但是我不知道如何实现这一点。

如何将导入路径添加到我的worker.py文件中? 我已经测试过,如果我使用命令行“ rqworker”在根目录中启动工作程序,则可以正常工作。 我的应用程序认为worker.py文件位于根目录中,但实际上位于根目录中的project /中。 我如何以及在哪里指定它以便它在本地工作并在Heroku中部署?

这是您的错误消息吗? “ ImportError:没有名为config的模块”

您错过了该行的config.py

app.config.from_object('config')

from_object(obj) :obj可能是

  1. 具有该名称的对象将被导入
  2. 实际的对象引用:直接使用该对象

因此,为了使“ config”有效,您可以在/ app下创建config.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM