【问题标题】:gunicorn: No Module named 'wsgi'gunicorn:没有名为“wsgi”的模块
【发布时间】:2018-01-05 20:47:17
【问题描述】:

我有一个项目设置为与 docker 一起运行 一台机器是 ubuntu 我一直运行良好,但最近我尝试在我的 Windows 笔记本电脑上运行它并收到 ModuleNotFoundError。

[2018-01-05 20:31:46 +0000] [5] [INFO] Starting gunicorn 19.7.1
explore_1   | [2018-01-05 20:31:46 +0000] [5] [INFO] Listening at: http://0.0.0.0:8080 (5)
explore_1   | [2018-01-05 20:31:46 +0000] [5] [INFO] Using worker: sync
explore_1   | [2018-01-05 20:31:46 +0000] [8] [INFO] Booting worker with pid: 8
explore_1   | [2018-01-05 20:31:46 +0000] [8] [ERROR] Exception in worker process
explore_1   | Traceback (most recent call last):
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
explore_1   |     worker.init_process()
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
explore_1   |     self.load_wsgi()
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
explore_1   |     self.wsgi = self.app.wsgi()
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
explore_1   |     self.callable = self.load()
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
explore_1   |     return self.load_wsgiapp()
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
explore_1   |     return util.import_app(self.app_uri)
explore_1   |   File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
explore_1   |     __import__(module)
explore_1   | ModuleNotFoundError: No module named 'wsgi'
explore_1   | [2018-01-05 20:31:46 +0000] [8] [INFO] Worker exiting (pid: 8)
explore_1   | [2018-01-05 20:31:47 +0000] [5] [INFO] Shutting down: Master
explore_1   | [2018-01-05 20:31:47 +0000] [5] [INFO] Reason: Worker failed to boot.

我检查以确保我的路径环境变量设置正确。是否有任何常见的独角兽问题可能导致此问题或其他明显检查的问题?

这个容器的dockerfile如下:

FROM python:3
MAINTAINER dev@temboinc.com
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
ENV MODE dev
EXPOSE 8080
VOLUME /static
COPY src/static /static
RUN python3 setup.py install
#CMD python3 wsgi.py
CMD gunicorn -w 3 -b 0.0.0.0:8080 wsgi --reload

【问题讨论】:

  • 显然没有名为wsgi.py的文件? docker 容器中的 /usr/src/app 中有什么?
  • 在使用 dockerfile 进行一些工具之后,它看起来像 COPY 。 /usr/src/app 不会复制 wsgi.py,即使它与 dockerfile 位于同一目录中。不知道为什么linux上的docker和windows上的docker之间的这种行为会有所不同。
  • 检查您的 docker 版本,它们可能在 windows 和 linux 之间有所不同。

标签: python docker flask gunicorn


【解决方案1】:

要切换到项目文件夹,您可以使用命令--chdir
示例:

gunicorn -w 2 -b 0.0.0.0:8000 --chdir /code/myproject myproject.wsgi

【讨论】:

    【解决方案2】:

    改变这个:

    CMD gunicorn -w 3 -b 0.0.0.0:8080 wsgi --reload
    

    到这里:

    CMD gunicorn -w 3 -b 0.0.0.0:8080 /full/path/to/wsgi --reload
    

    /full/path/to/wsgi 是您应用的绝对路径——我猜是/usr/src/app/wsgi?)

    【讨论】:

      【解决方案3】:

      您要求gunicorn 在当前目录中运行文件名wsgi.py,或运行名为wsgi 的模块。后者可能只是一个名为wsgi/ 的目录,其中包含一个__init__.py 文件(因此您需要wsgi/__init__.py

      如果您的 Web 应用程序包含在具有不同名称的文件中,您需要将 gunicorn 命令从 wsgi 调整为任何名称。

      由于看起来您正在使用 Docker 来运行它,因此您也可能没有使用 Dockerfile 中的 ADD 命令将您的 wsgi.py 文件复制到您的 Docker 容器中。或者,您可能已经这样做了,但它与您运行 gunicorn 命令的目录不同。

      【讨论】:

        猜你喜欢
        • 2015-08-06
        • 1970-01-01
        • 2012-07-16
        • 2020-01-15
        • 2017-01-20
        • 2017-06-22
        • 2018-08-08
        • 2016-01-02
        • 1970-01-01
        相关资源
        最近更新 更多