繁体   English   中英

在Docker容器中运行python脚本时导入错误?

[英]Import error when running python script inside docker container?

我的目标是开始一个使用容器中的Rabbitmq按摩的脚本,这是重要的细节:

messenger.py ,这是我要运行的脚本:

import pika
from . import create_app

class PikaMassenger():

    def __init__(self, *args, **kwargs):
        pass

    def consume(self, keys, callback):
        pass

    def __enter__(self):
        return self


    def __exit__(self, exc_type, exc_value, traceback):
        self.conn.close()



def start_consumer(app):

    def callback(ch, method, properties, body):
        try:
            print("Event recieved %r" % body)
            with app.app_context():
                pass

        except Exception as e:
            print("Consuming event %s failed: %s" % (method.routing_key, str(e)))

    with PikaMassenger() as consumer:
        consumer.consume(keys=['user.*', ], callback=callback)

if __name__ == "__main__":
    app = create_app()
    start_consumer(app)

我的__init__.py仅包含应用程序工厂( create_app )。 我的Dockerfile和docker-compose是:

Dockerfile

FROM  python:3.6

COPY requirements.txt /app/requirements.txt

WORKDIR /app

RUN pip install -r requirements.txt

COPY . /app

ENV SECRET_KEY dev


ENV FLASK_APP run.py

CMD  flask run

docker-compose.yaml

  app:
    build:
      context: ./app
    expose:
      - "5000"
      - PYTHONUNBUFFERED=1
    restart: on-failure

  app_consumer:
    build:
      context: ./app
    command: python -m messenger.py
    environment:
      - PYTHONUNBUFFERED=1
    restart: on-failure
    depends_on:
      - rabbitmq 

所以我想做的是用相同的Dockerfile运行两个容器,同时覆盖其中一个的command参数,我知道给定以上详细信息,将会发生错误:

 File "/app/massenger.py", line 2, in <module>
     from . import create_app
 ImportError: attempted relative import with no known parent package

也许我可能不得不在docker-compose.yaml更改工作目录,或者以其他方式运行脚本。

如果需要更多详细信息,或者您想让我尝试一下,请告知我。

我认为此错误是由于“。”引起的。 代表道路是错误的。 在本地“。”中 采用当前目录。但是在Docker'。'中。 从某些根目录获取路径。

尝试将该路径指定为静态路径,或使用os.getcwd()方法。

暂无
暂无

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

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