Python Django-mysite.wsgi-文件不存在,但uWSGI可以工作。怎么用?
uWSGI的工作原理有一些神奇之处(我正在Django中使用它),我只是不明白 我有以下测试Django项目:Python Django-mysite.wsgi-文件不存在,但uWSGI可以工作。怎么用?,python,django,uwsgi,Python,Django,Uwsgi,uWSGI的工作原理有一些神奇之处(我正在Django中使用它),我只是不明白 我有以下测试Django项目: (uwsgi-tutorial)[root@localhost mysite]# tree . |-- db.sqlite3 |-- manage.py |-- mysite | |-- __init__.py | |-- __pycache__ | | |-- __init__.cpython-34.pyc | | |-- settings.cpython-3
(uwsgi-tutorial)[root@localhost mysite]# tree
.
|-- db.sqlite3
|-- manage.py
|-- mysite
| |-- __init__.py
| |-- __pycache__
| | |-- __init__.cpython-34.pyc
| | |-- settings.cpython-34.pyc
| | |-- urls.cpython-34.pyc
| | `-- wsgi.cpython-34.pyc
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- test.py
在这个文件夹中,我运行uwsgi--http:8000--module mysite.wsgi
它是有效的
怎么做
我的意思是,没有像mysite.wsgi这样的文件。但是有mysite/wsgi.py。现在,如果我运行uwsgi--http:8000--module mysite/wsgi.py
,它就不工作了(HTTP500)
如果我将mysite.wsgi更改为任何其他内容,则uWSGI无法加载模块,因此模块名称必须与Django项目名称匹配,您必须添加.wsgi以启用“魔法”
大多数uWSGI+Django指南,包括官方
比如说:
模块:要使用的WSGI模块–可能创建的mysite.WSGI模块
或
modulemysite.wsgi:加载指定的wsgi模块
我不明白它是如何工作的,为什么会这样。谁能解释一下吗?:)提前谢谢 玩了一会儿之后,我似乎已经理解了真正发生的事情-模块是一个Python模块参考,就像Python中的导入语句一样 我认为uWSGI是一个通用的东西,不与Python绑定,那么为什么它需要Python模块引用呢?看起来uWSGI最初是为Python开发的。其余的选项可以通过插件和自定义版本获得。因此,当我通过安装uWSGI时,pip安装uWSGI是使用默认设置编译的,这意味着它需要一个Python模块引用。至少我现在是这样理解的 因此,例如,我可以将wsgi.py内的mysite/文件夹重命名为socool.py,并通过
uswgi--http:8000--module mysite.socool
运行我的设置
如果有人能为我的回答增添清晰,那就太好了
更新-01:
至少在Arch Linux发行版中,通过pacman-S uwsgi安装的uwsgi系统包与通过pip install uwsgi安装的Python包之间存在差异
如果安装了一个系统包,那么它就没有现成的Python功能。例如,运行uwsgi--module…
将给出一个错误,即module选项不受支持
只有在安装uWSGI插件Python之后,才能使用uWSGI系统包运行Python模块。还有必要指定要使用的插件-uwsgi--plugins python…
[root@localhost ~]# uwsgi --help | grep module | wc -l
0
[root@localhost ~]# uwsgi --plugins python --help | grep module | wc -l
23
突然,帮助输出中出现了额外的选项,现在支持--module
希望这能帮助像我这样不熟悉uWSGI的人。WSGI是Python标准。uWSGI是该标准的一个实现,后来扩展到其他语言。