web.py 0.3 新手指南 - 安装
Summary
- 安裝
- 開發
- 產品
- LightTPD
- .. 使用 FastCGI
- Apache
- .. 使用 CGI
- .. 使用 CGI using .htaccess
- .. 使用 FastCGI
- .. 使用 SCGI
- .. 使用 mod_python
- .. 使用 mod_wsgi
- .. 使用 mod_rewrite
- LightTPD
安裝
安裝web.py, 請先下載:
http://webpy.org/static/web.py-0.33.tar.gz解壓并拷貝?web?文件夾到你的應用程序目錄下。 或者,為了讓所有的應用程序都可以使用,運行:
python setup.py install注意: 在某些類unix系統上你可能需要切換到root用戶或者運行:
sudo python setup.py install查看?推薦設置.
另外一個選擇是使用Easy Install. Easy Install 使用如下:
easy_install web.py開發
web.py 內置了web服務器。可以按照?tutorial?學習如何寫一個Web應用。 寫完后,將你的代碼放到code.py?并如下面的方法來啟動服務器:
python code.py打開你的瀏覽器輸入?http://localhost:8080/?查看頁面。 若要制定另外的端口,使用?python code.py 1234。
產品
現在所運行 web.py 程序的web服務器是挺不錯的, 但絕大多數網站還是需要更加專業一些的web服務器。web.py 實現了?WSGI?并能在任何兼容它的服務器上運行。 WSGI 是一個web服務器與應用程序之間的通用API, 就如Java 的 Servlet 接口。 你需要安裝?flup?(download here) 使web.py 支持with CGI, FastCGI 或 SCGI, flup提供了這些API的WSGI接口。
對于所有的CGI變量, 添加以下到你的?code.py:
#!/usr/bin/env python并運行?chmod +x code.py?添加可執行屬性。
LightTPD
.. 使用 FastCGI
在產品中通過FastCGI結合lighttpd是web.py使用的一種推薦方法。?reddit.com?通過該方法來處理百萬次的點擊。
lighttpd config設置參考如下:
server.modules = ("mod_fastcgi", "mod_rewrite")server.document-root = "/path/to/root/" fastcgi.server = ( "/code.py" => (( "socket" => "/tmp/fastcgi.socket","bin-path" => "/path/to/root/code.py","max-procs" => 1)))url.rewrite-once = ("^/favicon.ico$" => "/static/favicon.ico","^/static/(.*)$" => "/static/$1","^/(.*)$" => "/code.py/$1")在某些版本的lighttpd中, 需要保證fastcgi.server選項下的"check-local"屬性設置為"false", 特別是當你的code.py?不在文檔根目錄下。
如果你得到錯誤顯示不能夠導入flup, 請在命令行下輸入 "easy_install flup" 來安裝。
從修訂版本 145開始, 如果你的代碼使用了重定向,還需要在fastcgi選項下設置bin-environment變量。 如果你的代碼重定向到http://domain.com/ 而在url欄中你會看到 http://domain.com/code.py/, 你可以通過設置這個環境變量來阻止。 這樣你的fastcgi.server設置將會如下:
fastcgi.server = ( "/code.py" => (("socket" => "/tmp/fastcgi.socket","bin-path" => "/path/to/root/code.py","max-procs" => 1,"bin-environment" => ("REAL_SCRIPT_NAME" => ""),"check-local" => "disable" )) )Apache
.. 使用 CGI
添加以下到?httpd.conf?或?apache2.conf。
Alias /foo/static/ /path/to/static ScriptAlias /foo/ /path/to/code.py.. 使用 CGI .htaccess
CGI很容易配置, 但不適合高性能網站。 添加以下到你的?.htaccess:
Options +ExecCGI AddHandler cgi-script .py將你的瀏覽器指向?http://example.com/code.py/。 不要忘記最后的斜杠,否則你將會看到?not found?消息 (因為在?urls?列表中你輸入的沒有被匹配到). 為了讓其運行的時候不需要添加?code.py, 啟用mod_rewrite 法則 (查看如下)。
注意:?web.py?的實現破壞了?cgitb?模塊,因為它截取了?stdout。 可以通過以下的方法來解決該問題:
import cgitb; cgitb.enable() import sys# ... import web etc here...def cgidebugerror():""" """ _wrappedstdout = sys.stdoutsys.stdout = web._oldstdoutcgitb.handler()sys.stdout = _wrappedstdoutweb.internalerror = cgidebugerror.. 使用 FastCGI
FastCGI很容易配置,運行方式如同mod_python。
添加以下到?.htaccess:
<Files code.py> SetHandler fastcgi-script </Files>不幸的是, 不像lighttpd, Apache不能夠暗示你的web.py腳本以FastCGI 服務器的形式工作,因此你需要明確的告訴web.py。 添加以下到?code.py的?if __name__ == "__main__":?行前:
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)將你的瀏覽器指向?http://example.com/code.py/。 不要忘記最后的斜杠,否則你將會看到?not found?消息 (因為在?urls?列表中你輸入的沒有被匹配到). 為了讓其運行的時候不需要添加?code.py, 啟用mod_rewrite 法則 (查看如下)。
Walter 還有一些額外建議.
.. 使用 SCGI
https://www.mems-exchange.org/software/scgi/ 從 http://www.mems-exchange.org/software/files/mod_scgi/ 下載?mod_scgi?代碼 windows apache 用戶: 編輯 httpd.conf:
LoadModule scgi_module Modules/mod_scgi.so SCGIMount / 127.0.0.1:8080重啟apache,并在命令行中如下方式啟動code.py:
python code.py 127.0.0.1:8080 scgi打開你的瀏覽器,訪問127.0.0.1 It's ok!
.. 使用 mod_python
mod_python 運行方式如同FastCGI, 但不是那么方便配置。
對于 Python 2.5 按照如下:
cd /usr/lib/python2.5/wsgiref # or in windows: cd /python2.5/lib/wsgiref wget -O modpython_gateway.py http://projects.amor.org/misc/browser/modpython_gateway.py?format=raw # or fetch the file from that address using your browser對于 Python <2.5 按照如下:
cd /usr/lib/python2.4/site-packages # or in windows: cd /python2.4/lib/site-packages svn co svn://svn.eby-sarna.com/svnroot/wsgiref/wsgiref cd wsgiref wget -O modpython_gateway.py http://projects.amor.org/misc/browser/modpython_gateway.py?format=raw # or fetch the file from that address using your browser重命名?code.py?為?codep.py?或別的名字, 添加:
main = web.wsgifunc(web.webpyfunc(urls, globals()))在?.htaccess?中, 添加:
AddHandler python-program .py PythonHandler wsgiref.modpython_gateway::handler PythonOption wsgi.application codep::main你應該希望添加?RewriteRule?將?/?指向?/codep.py/
確保訪問?/codep.py/?的時候有添加最后的?/。 否則,你將會看到一條錯誤信息,比如?A server error occurred. Please contact the administrator.
.. 使用 mod_wsgi
mod_wsgi 是一個新的Apache模塊?通常優于mod_python?用于架設WSGI應用,它非常容易配置。
在?code.py?的最后添加:
application = web.wsgifunc(web.webpyfunc(urls, globals()))mod_wsgi 提供?許多可行方法?來實現WSGI應用, 但一種簡單的方法是添加以下到 .htaccess:
<Files code.py>SetHandler wsgi-scriptOptions ExecCGI FollowSymLinks </Files>如果在apache的 error.log 文件中出現 "ImportError: No module named web", 在導入web之前,你可能需要在code.py中嘗試設置絕對路徑:
import sys, os abspath = os.path.dirname(__file__) sys.path.append(abspath) os.chdir(abspath) import web同時, 你可能需要查看?WSGI應用的常見問題的 "Application Working Directory" 部分。
最終應該可以訪問?http://example.com/code.py/。
mod_rewrite 法則,Apache
如果希望 web.py 能夠通過 'http://example.com' 訪問,代替使用 'http://example.com/code.py/', 添加以下法則到?.htaccess?文件:
<IfModule mod_rewrite.c> RewriteEngine onRewriteBase /RewriteCond %{REQUEST_URI} !^/iconsRewriteCond %{REQUEST_URI} !^/favicon.ico$RewriteCond %{REQUEST_URI} !^(/.*)+code.py/RewriteRule ^(.*)$ code.py/$1 [PT] </IfModule>如果?code.py?在子目錄?myapp/中, 調整 RewriteBase 為?RewriteBase /myapp/。 如果還有一些靜態文件如CSS文件和圖片文件, 復制這些并改成你需要的地址。
轉載于:https://www.cnblogs.com/justjavac/archive/2012/11/23/webpy-tutorial-install.html
總結
以上是生活随笔為你收集整理的web.py 0.3 新手指南 - 安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server学习1(建数据库,建
- 下一篇: eclipse 导入myeclipse