无法启动 Gunicorn,ModuleNotFoundError:没有名为“myproject.wsgi”的模块

Posted

技术标签:

【中文标题】无法启动 Gunicorn,ModuleNotFoundError:没有名为“myproject.wsgi”的模块【英文标题】:Cannot start Gunicorn, ModuleNotFoundError: No module named 'myproject.wsgi' 【发布时间】:2020-10-10 21:12:21 【问题描述】:

这是我的文件夹结构:

~/myprojectdir
    manage.py
    myprojectenv/
        bin/
            activate
            gunicorn
            pip3
            python3
            ...
        lib/
            python3.6
            ...
    fishercoder/
        fishercoder/
            asgi.py
            urls.py
            settings.py
            wsgi.py
            __init__.py
            ...
        blog/
            views.py
            urls.py
            models.py
            admin.py
            apps.py
            templates/
            ...
        catalog/
            views.py
            urls.py
            models.py
            admin.py
            apps.py
            templates/
            ...

我已经运行source myprojectenv/bin/activate

这是我的/etc/systemd/system/gunicorn.service 文件:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myprojectdir
ExecStart=/home/ubuntu/myprojectdir/myprojectenv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

[Install]
WantedBy=multi-user.target

我已经替换了这一行:

myproject.wsgi:application

有了这个

fishercoder.wsgi:application 或这个

wsgi:application

听从question的建议

重新启动 Gunicorn。 也没有运气。

我的~/myprojectdir/fishercoder/wsgi.py 看起来像这样:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fishercoder.settings')

application = get_wsgi_application()

任何人都可以对此有所了解,将不胜感激!

【问题讨论】:

根据你的树形结构,你的wsgi.py文件在~/myprojectdir/fishercoder/fishercoder/wsgi.py 我也将这个wsgi.py 从那里复制到~/myprojectdir/fishercoder。我现在两个地方都有。需要做什么? 我没有看到任何__init__.py 文件。没有它的目录不是 python 包。 刚刚在问题中添加了它。谢谢 您有setup.py 文件吗?你的根包是哪个目录?您的setup.py 文件是如何完成的? 【参考方案1】:

以防万一有人遇到同样的问题,我可以通过将 ~/myprojectdir/fishercoder/ 目录中的内容复制到其父目录 ~/myprojectdir/ 来解除阻止。

然后在我的/etc/systemd/system/gunicorn.service 文件中更改这一行

ExecStart=/home/ubuntu/myprojectdir/myprojectenv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

成为

ExecStart=/home/ubuntu/myprojectdir/myprojectenv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          fishercoder.wsgi:application

显然这是 hacky 并且不理想,但至少它现在可以工作。 我仍在尝试寻找一个教程来帮助我以更 Python 的方式设置 setup.py。

【讨论】:

【参考方案2】:

如果您处于开发模式,您可以将您的 virtualenv 与您的源代码链接,以便 gunicorn 可以找到它。

为此,请激活您的 virtualenv 并在编辑模式下安装您的项目:

source /home/ubuntu/myprojectdir/myprojectenv/bin/activate
cd /home/ubuntu/myprojectdir/fishercoder
pip install -e .

当然,您的项目目录中需要setup.py

您的 wsgi 文件可以位于任何级别,但通常位于您的根包中。

但是,目前你的根包好像是fishercoder,所以在你的配置文件中,你需要写:fishercoder.wsgi:application

【讨论】:

我不在开发模式下,在 EC2 实例上配置它,我在 virtualenv 中运行。我确实尝试过fishercoder.wsgi:application 没有运气。 你能告诉我这个吗:pip install -e . 这是做什么的?我没弄明白。谢谢 您应该在部署之前尝试在开发模式下运行您的应用程序... pip.pypa.io/en/stable/reference/pip_install/#install-editable

以上是关于无法启动 Gunicorn,ModuleNotFoundError:没有名为“myproject.wsgi”的模块的主要内容,如果未能解决你的问题,请参考以下文章

即使所有配置文件都正确,gunicorn 服务也没有启动

气流网络服务器启动 - gunicorn 工作人员正在关闭

无法在 gunicorn wsgi 服务器上运行烧瓶应用程序

Nginx Django 和 Gunicorn。 Gunicorn 袜子文件丢失?

优雅的退出/关闭/重启gunicorn进程

linux 优雅的退出/关闭/重启gunicorn进程