任何人都可以使用IIS设置Python?一直试图弄清楚,但它不起作用,这让我发疯。我看到很多例子,但我无法让它发挥作用。
Python + Flask网络应用程序的路径
C:\inetpub\wwwroot
以下是我遵循的步骤:
在IIS管理器中,突出显示的Web服务器和FastCGI设置中添加了一个包含以下值的应用程序:
Full Path: C:\python35\python.exe
Arguments: C:\inetpub\wwwroot\wfastcgi.py
Environment Variable Collection:
PYTHONPATH: C:\inetpub\wwwroot\
WSGI_HANDLER: app.app
WSGI_LOG: C:\logs\app.txt
创建了一个名为MyWebSite的网站,指向C:\ inetpub \ wwwroot
在网站的处理程序映射设置中,添加了FastCgiModule的模块映射:
Request path: *
Module: FastCgiModule
Executable: C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py
Name: FlaskHandler
使用Flask上的简单Python应用程序,并将其添加到Web根文件夹中。所以在C:\ inetpub \ wwww只有3个文件: app.py , web.config 和 wfastcgi.py
的web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="PYTHONPATH" value="" />
<add key="WSGI_HANDLER" value="app.app" />
<add key="WSGI_RESTART_FILE_REGEX" value="(?i).*\.(py|cnf|config)$" />
</appSettings>
<system.webServer>
<handlers>
<add name="FlaskHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
app.run()
的applicationHost.config :
全球模块部分:
<add name="FastCgiModule" image="%windir%\System32\inetsrv\iisfcgi.dll" />
模块部分:
<add name="FastCgiModule" lockItem="true" />
系统网络服务器部分:
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
...
<fastCgi>
<application fullPath="C:\Python35\python.exe" arguments="C:\inetpub\wwwroot\wfastcgi.py">
<environmentVariables>
<environmentVariable name="PYTHONPATH" value="C:\inetpub\wwwroot\" />
<environmentVariable name="WSGI_HANDLER" value="app.app" />
<environmentVariable name="WSGI_LOG" value="c:\logs\my_log.txt" />
</environmentVariables>
</application>
</fastCgi>
因此某些原因它无法按预期工作。
HTTP Error 500.0 - Internal Server Error
C:\python35\python.exe - The FastCGI process exited unexpectedly
似乎没有正确调用处理程序的scriptProcessor。它似乎确实被调用,因为当我将值更改为其他东西时,我得到一个错误:
HTTP Error 500.0 - Internal Server Error
<handler> scriptProcessor could not be found in <fastCGI> application configuration
我认为这是权限,所以我确保 NETWORK SERVICE 帐户具有Read&amp; Execute。我甚至给了所有人帐户完全控制。我认为 NETWORK SERVICE 是需要许可的帐户。
我添加了日志记录以在 app.py 中注销调试信息。我没有得到任何日志信息能够写出日志文件。我不确定wfastcgi.py如何使用IIS配置,即使我将其添加到web.config,也可以设置日志文件的位置。也许如果scriptProcessor实际上被调用,它最终会设置它。但是看看它似乎使用系统环境变量的代码,所以我只是将WSGI_LOG值添加为OS环境变量。仍然没有将调试信息记录到日志文件中。
所以我试过,在命令行上直接用wfastcgi文件作为参数运行python可执行文件,它似乎按预期工作,进入wfastcgi while循环并等待请求。它还会将调试信息记录到日志文件中。
python.exe c:\inetpub\wwwroot\wfastcgi.py
当我运行python服务器时,它在浏览器中导航到 localhost:8081 时会起作用,所以我怀疑它是配置的东西。
python app.py runserver 0.0.0.0:8081
那是怎么回事。我没有想法。任何帮助将不胜感激。
谢谢!这让我疯了。
答案 0 :(得分:2)
根据描述,您似乎需要在IIS上进行一些配置更改。我在IIS 7.5上有以下配置设置,并使用FastCgiModule运行Python Flask。您可以采取以下步骤:
Actions
&gt;&gt;右窗格中显示Add
并有两个设置。我有Python 2.7,为你的情况你必须输入Python 3.5的路径选择左侧的网站名称,然后双击处理程序映射。在“操作”下的右窗格中,单击“添加模块映射”并输入
handler.fcgi
FastCgiModule
C:\Python27\python.exe|C:\Python27\Scripts\wfastcgi.py
(特定于Python版本的路径)Python FastCGI
答案 1 :(得分:2)
我知道这个问题有几个月了,但我想我需要分享我的解决方案。它真的可以帮助某人陷入同样的境地,因为我无法找到解决此问题的单身人士。我们距离放弃了另一个服务器管理器只有两英寸,因为我花了不少于整整一天的工作来解决这个问题,爬上整个互联网以寻找解释或任何工作解决方案的线索。
似乎我遇到问题的输入是:
可执行(可选):
C:\Python27\python.exe | C:\Python27\Scripts\wfastcgi.py
它做了什么,是删除&#34;可执行文件(可选)&#34;中的路径周围的间距?领域。我深深地假设这样一个带有两个输入的字段足以修剪解析的值,所以我每次都做了完全相同的间距。但我错了,我的结果是一个映射与赌博dumble路径前面有一个空格和什么。删除所有空格后,这对我来说非常不舒服,它按预期工作,甚至不必删除处理程序并将其放回原处。这种删除它并在IIS论坛上再次尝试建议正在污染开发人员的头脑,错误地认为一切都需要撤消,当它真的只需要良好的配置时。
工作输入:
可执行(可选):
C:\Python27\python.exe|C:\Python27\Scripts\wfastcgi.py
我希望这对某人有所帮助,如果一个MS开发者有机会到这里,请删除这个双输入字段的邪恶黑客,因为如果你进入fastCgi设置,它会分成两个不同的字段在全球范围内,在其他地方的某个领域询问两个输入只会产生误导。至少修剪这两个值,如此深入的输入列表填充从业者不会再次崩溃这个问题!面对这样一个问题是非常令人费解的,即错误表明基本上你输入的内容并不存在。
<强> 更新 强>
值得一提的是,最后,您必须将python模块中的应用程序对象公开给IIS,仅此而已。对于某些人来说这似乎是显而易见的,但它没有很好的记录,如果python模块实际上也启动了他的应用程序,它也会崩溃。它绝对需要这样的东西才能拥有一个工作的开发环境:
Python - app.py
# <imports...>
# <routes...>
myApp.secret_key = 'this-is-a-secret-key'
if __name__ == '__main__':
# start application in python
# IIS will get access to variable `myApp` and start it himself,
# without starting it twice because IIS won't run the script
# as `__main__`. In this scenario `WSGI_HANDLER` will be required
# to have `app.myApp` to reach your application.
IIS中的应用程序将完成其工作。您仍然可以使用python app.py
在调试模式下启动它。
答案 2 :(得分:1)
就我而言,这是权限问题-
您需要对包含 python.exe 的整个 python 文件夹具有读取和执行权限
通过在文件夹位置 C:\Python36
icacls . /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)"
步骤
2.pip install wfastcgi
3.启用wfastcgi
4.创建myapp.py
5.创建web.config
----web.config------
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="FlaskFastCGI" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="C:\python\python36\python.exe|C:\python\python36\lib\site-packages\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script" />
</handlers>
<security>
<requestFiltering allowDoubleEscaping="true"></requestFiltering>
</security>
</system.webServer>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="myapp.app" />
<add key="PYTHONPATH" value="~/" />
</appSettings>
</configuration>
答案 3 :(得分:-1)
Windows->属性->安全->编辑->添加->所有->完全控制