Python在IIS上:怎么做?
我以前做过PHP和dotNet,现在对Python很感兴趣。我想把PHP的功能一点一点地转到Python上,同时让它们并行运行。这个过程可能会花费我两年时间,因为我的应用程序非常庞大,而我现在又被IIS束缚住了。我有15年的网页编程经验,包括在IIS上做ISAPI模块的C语言工作,但我不想再深入这个领域了。
看起来Python在IIS上运行得并不好。我尝试过FastCGI(只支持PHP,不支持Python)和PyIsapie
(文档很差,没能成功运行)。最后,我通过HeliconZoo的dll让它运行起来了,但:
我接下来的问题是:如何调试和开发网站?在PHP中,你只需安装一个调试工具,遇到问题时就可以调试,设置断点,逐步执行代码,检查变量等等。对我来说,这似乎是开发者或故障排除者最基本的工作。我买了WingIDE,这是一个很棒的工具和调试器,但由于某种原因,它无法连接到IIS进程中的Python实例,所以无法调试。我注意到Helicon启动Python时加了-O
这个参数,所以我甚至重新编译了Python以忽略这个参数,但我的调试器(WingIDE)就是无法启动。
我可以在IIS上用半个小时搭建一个PHP的“你好,世界”网站,包括下载时间。我觉得我花了大约120个小时或更多的时间来让Python工作,但都没有成功。我买了《Programming Python》和《Learning Python》,总共大约3000页。我也在网上搜索到快累死。
我觉得Python是个很棒的语言,但我快要放弃我的尝试了。有没有人能给我一步一步的指导,教我如何在IIS7上设置这个?
5 个回答
这个问题已经有点时间了,之前的回答也比较旧(没有被接受的答案),所以这里提供一个更新的做法。下面的微软文档有一个详细的步骤指南,教你如何通过IIS来托管Python应用(看起来也适用于Azure App Services,不过微软建议使用Linux),这个方法是利用FastCGI(相比于2021年之前的CGI方法,FastCGI更好)。
简单来说就是:
- 在Windows上安装Python
- 根据https://pypi.org/project/wfastcgi/安装wfastcgi包
- 配置你的web.config文件,让它指向你用的Python框架(比如Bottle、Flask、Django)
只要确保存放cgi脚本的文件夹路径里没有空格或者&符号就行。
我试了很多方法,折腾了好几天都没成功,后来我换了个路径,结果就好了。
更新:如果路径里有空格,就把路径用引号括起来,但%s %s
部分不要加引号,像这样:
"C:\Program Files\Python36\python.exe" %s %s
我刚刚花了5分钟做完这个。
确保你有IIS(互联网信息服务)。可以运行这个命令:
%windir%\system32\OptionalFeatures.exe
。或者通过点击的方式:开始...控制面板...程序和功能...(然后在左边)打开或关闭Windows功能。确保在IIS选项下安装了CGI。从 python.org 下载Windows版的Python。我下载的是Python2.7。如果你的Windows是64位的,确保下载x64版本。
解压并安装这个Python的MSI文件。选择默认选项,这样Python会安装到
c:\Python27
。创建一个文件夹来存放你的“开发”Python脚本。比如,
c:\dev\python
。设置
c:\dev\python
目录下文件的权限,让IIS可以读取和执行。可以通过命令行运行这两个icacls.exe命令来完成:cd \dev\python icacls . /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)" icacls . /grant "Builtin\IIS_IUSRS:(OI)(CI)(RX)"
打开IIS管理器。运行
%windir%\system32\inetsrv\iis.msc
,或者通过控制面板:开始...控制面板...管理工具...互联网信息服务(IIS)管理器。创建一个新的应用程序。指定虚拟路径为/py
,物理路径为c:\dev\python
。在这个IIS应用程序中,为
*.py
添加一个脚本映射,并将其映射到c:\python27\python.exe %s %s
。在
c:\dev\python
中创建一个名为“HelloWorld.py”的文件,内容如下:print('Content-Type: text/plain') print('') print('Hello, world!')
访问
http://localhost/py/helloworld.py
。