Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-mysite.wsgi-文件不存在,但uWSGI可以工作。怎么用?_Python_Django_Uwsgi - Fatal编程技术网

Python Django-mysite.wsgi-文件不存在,但uWSGI可以工作。怎么用?

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的工作原理有一些神奇之处(我正在Django中使用它),我只是不明白

我有以下测试Django项目:

(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是该标准的一个实现,后来扩展到其他语言。