无法启动 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 wsgi 服务器上运行烧瓶应用程序