我已经把Python作为CGI应用程序安装在windows7上的IIS上。这很简单,但是为了更好的灵活性,我想使用WSGI工具。在
我下载了isapi_wsgi的存档文件,解压缩后,按照the instructions运行安装,如下所示:
\python27\python.exe setup.py install
此操作成功:
然后我编写了一个.py模块,其中包含wsgi胶水,并尝试安装它。失败的原因如下:
这是一个COM名字对象错误,我知道IIS6兼容的管理工具是基于COM名字对象的,这提醒我IIS6兼容管理工具的isapi_wsgi有一个先决条件。我运行了\windows\system32\OptionalFeatures.exe
并安装了它,然后重新运行了.py模块并正确安装了它。在
好吧,太好了。现在当我查看当前目录时,我看到一个名为_app1的新DLL_wsgi.dll,当我在IIS管理器中查看时,我可以看到一个新的iisvdir,以及该vdir中“*”的脚本映射,该脚本映射到_app1_wsgi.DLL. 一切都好。但是!向http://localhost/wsgi
发出请求会产生500个错误。在
通过一些尝试和错误,我发现定义我的处理程序的.py模块必须位于site packages目录中。我对此感到非常惊讶。在
我能避免吗?我可以简单地将.py模块放在与生成的.dll文件相同的目录中吗?或者,我是否需要将所有python逻辑部署到站点包中,以便从WSGI机制运行它?在
把这个放在你的纸条上:
导入站点 site.addsitedir('path/to/your/site packages')
你遇到的同样的问题,用这两条线解决了
答案是:
问题中描述的isapi wsgi的安装是正确的。
基本样板应用程序副本正如isapi_wsgi附带的示例代码所示,web应用程序的python类需要位于site packages目录中。
可以允许python源模块与生成的*.dll文件位于同一目录中,但它需要在*wsgi.py文件。
在Windows上运行python进行开发的更好方法是下载googleappengine并使用内置的专用http服务器。gaesdk附带的框架处理重新加载,并允许将.py模块放在特定的目录中。
如果您不想下载并安装gaesdk,那么您可以尝试以下方法。使用这段代码,当请求到达isapi_wsgi时,处理程序会在主目录中查找py模块,并加载它。如果模块已经加载,它会检查文件“last modified time”,如果上次修改时间晚于上次加载的时间,则会重新加载模块。它适用于简单的情况,但我认为当存在嵌套的模块依赖关系时,它将变得脆弱。在
使用此模型,请求http://foo/wsgi/bar将尝试加载棒.py从带有WSGI.dll文件的主目录。如果棒.py找不到,你得到了404。如果棒.py自上次运行后已更新,它将重新加载。如果杆不能装,你得500分。在
在棒.py必须公开导出名为
^{pr2}$handler
的方法。那个方法一定是一个生成器。是这样的:但正如我所说,我认为GAE可能是使用Windows开发Python web应用程序的更好方法。在
相关问题 更多 >
编程相关推荐