㈠ python的開發環境有哪些
總結了10個開發環境,都是比較常見且很好用的,希望對你有所幫助:
PyCharm
PyCharm 是 JetBrains 開發的 Python IDE。PyCharm用於一般IDE具備的功能,比如, 調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制……另外,PyCharm還提供了一些很好的功能用於Django開發,同時支持Google App Engine,更酷的是,PyCharm支持IronPython!
2. Vim
曾有人開玩笑說,如果生成一段隨機字元串,有人回答給他一個Vim 編輯器就可以了。Vim 雖然使用門檻高,但是一旦你學會了,寫代碼的效率杠杠的,Vim 是高級文本編輯器,旨在提供實際的 Unix 編輯器』Vi』功能,支持更多更完善的特性集。Vim 不需要花費太多的學習時間,一旦你需要一個無縫的編程體驗,那麼就會把 Vim 集成到你的工作流中。這是黑客最喜歡的編輯器之一。
3. Eclipse with PyDev
Eclipse 曾經是非常流行的 IDE,而且已經有了很久的歷史。雖然現在慢慢地被 jetbrains 家族替代了,但是,瘦死的駱駝比馬大,Eclipse with Pydev 允許開發者創建有用和互動式的 Web 應用。PyDev 是 Eclipse 開發 Python 的 IDE,支持 Python,Jython和 IronPython 的開發。
4. Sublime Text
Sublime Text 是開發者中最流行的編輯器之一,多功能,支持多種語言,而且在開發者社區非常受歡迎。Sublime 有自己的包管理器,開發者可以使用TA來安裝組件,插件和額外的樣式,所有這些都能提升你的編碼體驗。雖然作為收費軟體,良心的是你不需要付費也能正常使用,只不過是不是給你彈出一個購買的窗口,有錢了還是要支持一下正版軟體。
5. Visual Studio Code
Visual Studio Code (VSCode)為MS所開發的code editing tool,免費且開源,並支持Windows,Mac OS,Linux。VSCode像是精簡版的Visual Studio,升級版的Sublime。VSCode由於其非常的輕量,因此使用過程中非常的流暢,對於用戶不同的需要,可以自行下載需要的擴展(Extensions)來安裝。
對於配置Python開發環境來說,相比於Sublime,配置起來更加容易。VSCode配置完後的環境是可以直接進行可視化的Debug,再也不用打各種print或者用pdb調試命令了,回歸到Visual Studio里F10和F11。
6. Atom
Atom是由 GitHub 的程序員們打造的稱為「屬於21世紀」的代碼編輯器。它開源免費跨平台(支持 Windows、Mac、Linux 三大桌面平台),並且整合 GIT 並提供類似 SublimeText 的包管理功能,作為一個現代的代碼編輯器,Atom 支持各種編程語言的代碼高亮(HTML / CSS / Javascript / PHP / Python / C / C++ / Objective C / Java / JSON / Perl / CoffeeScript / Go / Sass / YAML / Markdown 等等)、 與大多數其他編輯器相比,Atom的語言支持已經算是覆蓋非常全面了。另外,它的代碼補全功能(也叫Snippets) 也非常好用,你只需輸入幾個字元即可展開成各種常用代碼,可以極大提高編程效率。
7. Emacs
GNU Emacs 是可擴展,自定義的文本編輯器,甚至是更多的功能。Emacs 的核心是 Emacs Lisp 解析器,但是支持文本編輯。如果你已經使用過 Vim,可以嘗試一下 Emacs。
8. Spyder
Spyder (前身是 Pydee) 是一個強大的互動式 Python 語言開發環境,提供高級的代碼編輯、交互測試、調試等特性,支持包括 Windows、Linux 和 OS X 系統。Spyder是Anaconda科學計算工具中默認的開發工具,做數據分析、搞機器學習的人喜歡這個工具。
9. Thonny
Thonny是基於python內置圖形庫tkinter開發出來的支持多平台(windows,Mac,Linux)的python IDE,支持語法著色、代碼自動補全、debug等功能,如果你正在尋找一種「輕量級」的python IDE,那麼可以試一試Thonny。
10. Wing
Wingware 的 Python IDE 兼容 Python 2.x 和 3.x,可以結合 Django, matplotlib, Zope, Plone, App Engine, PyQt, PySide, wxPython, PyGTK, Tkinter, mod_wsgi, pygame, Maya, MotionBuilder, NUKE, Blender 和其他 Python 框架使用。Wing 支持測試驅動開發,集成了單元測試,nose 和 Django 框架的執行和調試功能。Wing IDE 啟動和運行的速度都非常快,支持 Windows, Linux, OS X 和 Python versi。
㈡ 純 Python 寫一個 Web 框架,就是這么簡單
造輪子是最好的一種學習方式,本文嘗試從0開始造個Python Web框架的輪子,我稱它為 ToyWebF 。
本文操作環境為:MacOS,文中涉及的命令,請根據自己的系統進行替換。
ToyWebF的簡單特性:
下面我們來實現這些特性。
首先,我們需要安裝gunicorn,回憶一下Flask框架,該框架有內置的Web伺服器,但不穩定,所以上線時通常會替換成uWSGI或gunicorn,這里不搞這個內置Web服務,直接使用gunicorn。
我們創建新的目錄與Python虛擬環境,在該虛擬環境中安裝gunicorn
在啥都沒有的情況下,構建最簡單的Web服務,在ToyWebF目錄下,創建app.py與api.py文件,寫入下面代碼。
運行 gunicorn app:app 訪問 http://127.0.0.1:8000 ,可以看見 Hello, World! ,但現在請求體中的參數在environ變數中,難以解析,我們返回的response也是bytes形式。
我們可以使用webob庫,將environ中的數據轉為Request對象,將需要返回的數據轉為Response對象,處理起來更加直觀方便,直接通過pip安裝一下。
然後修改一下API類的 __call__方法 ,代碼如下。
上述代碼中,通過webob庫的Request類將environ對象(請求的環境信息)轉為容易處理的request,隨後調用handle_request方法對request進行處理,處理的結果,通過response對象返回。
handle_request方法在ToyWebF中非常重要,它會匹配出某個路由對應的處理方法,然後調用該方法處理請求並將處理的結果返回,在解析handle_request前,需要先討論路由注冊實現,代碼如下。
其實就是將路由和方法存到self.routes字典中,可以通過route裝飾器的形式將路由和方法關聯,也可以通過add_route方法關聯,在app.py中使用一下。
因為url中可以存在變數,如 @app.route("/hello/{name}") ,所以在匹配時,需要進行解析,可以使用正則匹配的方式進行匹配,parse這個第三方庫已經幫我們實現了相應的正則匹配邏輯,pip安裝使用一下則可。
這里定義find_handler方法來實現對self.routes的遍歷。
了解了路由與方法關聯的原理後,就可以實現handle_request方法,該方法主要的路徑就是根據路由調度對應的方法,代碼如下。
在該方法中,首先實例化webob庫的Response對象,然後通過self.find_handler方法獲取此次請求路由對應的方法和對應的參數,比如。
它將返回hello方法對象和name參數,如果是 /hello/二兩 ,那麼name就是二兩。
因為route裝飾器可能裝飾器的類對象,比如。
此時self.find_handler方法返回的hanler就是個類,但我們希望調用的是類中的get、post、delete等方法,所以需要一個簡單的判斷邏輯,通過inspect.isclass方法判斷handler如果是類對象,那麼就通過getattr方法獲取類對象實例的中對應的請求方法。
如果類對象中沒有該方法屬性,則拋出該請求類型不被允許的錯誤,如果不是類對象或類對象中存在該方法屬性,則直接調用則可。
此外,如果方法的路由並沒有注冊到self.routes中,即404的情況,定義了defalut_response方法返回其中內容,代碼如下。
如果handle_request方法中調度的過程出現問題,則直接raise將錯誤拋出。
至此,一個最簡單的web服務就編寫完成了。
回顧Flask,Flask可以支持HTML、CSS、JavaScript等靜態文件,利用模板語言,可以構建出簡單但美觀的Web應用,我們讓TopWebF也支持這一功能,最終實現圖中的網站,完美兼容靜態文件。
Flask使用了jinja2作為其html模板引擎,ToyWebF同樣使用jinja2,jinja2其實實現一種簡單的DSL(領域內語言),讓我們可以在HTML中通過特殊的語法改變HTML的結構,該項目非常值得研究學習。
首先 pip install jinja2 ,然後就可以使用它了,在ToyWebF項目目錄中創建templates目錄,以該目錄作為默認的HTML文件根目錄,代碼如下。
首先利用jinja2的FileSystemLoader類將file system中的某個文件夾作為loader,然後初始化Environment。
在使用的過程中(即調用template方法),通過get_template方法獲得具體的某個模板並通過render方法將對應的內容傳遞給模板中的變數。
這里我們不寫前端代碼,直接去互聯網中下載模板,這里下載了Bootstrap提供的免費模板,可以自行去 https://startbootstrap.com/themes/freelancer/ 下載,下載完後,你會獲得index.html以及對應的css、jss、img等文件,將index.html移動到ToyWebF/templates中並簡單修改了一下,添加一些變數。
然後在app.py文件中為index.html定義路由以及需要的參數。
至此html文件的支持就完成了,但此時的html無法正常載入css和js,導致頁面布局非常醜陋且交互無法使用。
接著就讓ToyWebF支持css、js,首先在ToyWebF目錄下創建static文件夾用於存放css、js或img等靜態文件,隨後直接將前面下載的模板,其中的靜態文件復制到static中則可。
通過whitenoise第三方庫,可以通過簡單的幾行代碼讓web框架支持css和js,不需要依賴nginx等服務,首先 pip install whitenoise ,隨後修改API類的 __init__ 方法,代碼如下。
其實就是通過WhiteNoise將self.wsgi_app方法包裹起來,在調用API的 __call__ 方法時,直接調用self.whitenoise。
此時,如果請求web服務獲取css、js等靜態資源,WhiteNoise會獲取其內容並返回給client,它在背後會匹配靜態資源在系統中對應的文件並將其讀取返回。
至此,一開始的網頁效果就實現好了。
web服務如果出現500時,默認會返回 internal server error ,這顯得比較丑,為了讓框架使用者可以自定義500時返回的錯誤,需要添加一些代碼。
首先API初始化時,初始self.exception_handler對象並定義對應的方法添加自定義的錯誤
在handler_request方法進行請求調度時,調度的方法執行邏輯時報500,此時不再默認將錯誤拋出,而是先判斷是否有自定義錯誤處理。
在app.py中,自定義錯誤返回方法,如下。
custom_exception_handler方法只返回自定義的一段話,你完全可以替換成美觀的template。
我們可以實驗性定義一個路由來看效果。
Web服務的中間件也可以理解成鉤子,即在請求前可以對請求做一些處理或者返回Response前對Response做一下處理。
為了支持中間件,在TopWebF目錄下創建middleware.py文件,在編寫代碼前,思考一下如何實現?
回顧一下現在請求的調度邏輯。
1.通過routes裝飾器關聯路由和方法 2.通過API.whitenoise處理 3.如果是請求API介面,那麼會將參數傳遞給API.wsgi_app 4.API.wsgi_app最終會調用API.handle_request方法獲取路由對應的方法並調用該方法執行相應的邏輯
如果希望在request前以及response後做相應的操作,那麼其實就需要讓邏輯在API.handle_request前後執行,看一下代碼。
其中add方法會實例化Middleware對象,該對象會將當前的API類實例包裹起來。
Middleware.handle_request方法其實就是在self.app.handle_request前調用self.process_request方法處理request前的數據以及調用self.process_response處理response後的數據,而核心的調度邏輯,依舊交由API.handle_request方法進行處理。
這里的代碼可能會讓人感到疑惑, __call__ 方法和handle_request方法中都有self.app.handle_request(request),但其調用對象似乎不同?這個問題暫時放一下,先繼續完善代碼,然後再回來解釋。
接著在api.py中為API創建middleware屬性以及添加新中間件的方法。
隨後,在app.py中,自定義一個簡單的中間件,然後調用add_middleware方法將其添加。
定義好中間件後,在請求調度時,就需要使用中間件,為了兼容靜態文件的情況,需要對css、js、ing文件的請求路徑做一下兼容,在其路徑中加上/static前綴
緊接著,修改API的 __call__ ,兼容中間件和靜態文件,代碼如下。
至此,中間件的邏輯就完成了。
但代碼中依舊有疑惑,Middleware類中的 __call__ 方法和handle_request方法其調用的self.app到底是誰?
為了方便理解,這里一步步拆解。
如果沒有添加新的中間件,那麼請求的調度邏輯如下。
在沒有添加中間件的情況下,self.app其實就是API本身,所以 middleware.__call__ 中的self.app.handle_request就是調用API.handle_request。
如果添加了新的中間件,如上述代碼中添加了名為SimpleCustomMiddleware的中間件,此時的請求調度邏輯如下。
因為注冊中間件時,Middleware.add方法替換了原始Middleware實例中的app對象,將其替換成了SimpleCustomMiddleware,而SimpleCustomMiddleware也有app對象,SimpleCustomMiddleware中的app對象,才是API類實例。
在請求調度的過程中,就會觸發Middleware類的handle_request方法,該方法就會執行中間件相應的邏輯去處理request和response中的數據。
當然,你可以通過Middleware.add方法添加多個中間件,這就會構成棧式調用的效果,代碼如下。
啟動web服務後,其執行效果如下。
㈢ 干貨分享!Python三大web框架簡單介紹
1、Django
Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,模板T和視圖V。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。
2、Flask
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。
Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
Flask 很輕,花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。Flask 框架學會以後,可以考慮學習插件的使用。例如使用 WTForm + Flask-WTForm 來驗證表單數據,用 sqlAlchemy + Flask-SQLAlchemy 來對你的資料庫進行控制。
3、Tornado
Tornado是一種 Web 伺服器軟體的開源版本。Tornado 和現在的主流 Web 伺服器框架(包括大多數 Python 的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。
得利於其 非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個 理想框架。
關於干貨分享!Python三大web框架簡單介紹,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。
㈣ 用Python進行web開發需要學習什麼
需要學習Linux、xhtml、css、javascript、資料庫(關系型、nosql等)和需求分析等內容。
㈤ python開發環境有哪些
PythonIDE工具是每個Python工程師必須使用的開發工具,選擇正確的編輯器對Python編程效率的影響是非常大的,因此選擇合適的Python開發工具十分重要,以下是通過長期實踐發掘的好用的Python IDE,它們功能豐富,性能先進,能夠幫助開發人員快速的進行應用程序開發。
1. Pydev + Eclipse – 最好的免費python IDEPydev的是Python IDE中使用最普遍的,原因很簡單,它是免費的,同時還提供很多強大的功能來支持高效的Python編程。Pydev是一個運行在eclipse上的開源插件,它把python帶進了eclipse的王國,如果你本來就是是一個eclipse的用戶那麼Pydev將給你家裡一樣的感覺。Pydev能高居榜首,得益於這些關鍵功能,包括Django集成、自動代碼補全、多語言支持、集成的Python調試、代碼分析、代碼模板、智能縮進、括弧匹配、錯誤標記、源代碼控制集成、代碼折疊、UML編輯和查看和單元測試整合等。雖然Pydev是最好的開源python IDE,但是 它也和另一個名為Liclipse的產品一起打包,Liclipse是一個商業產品,同樣也構建在eclipse上,提供了易用性改進和額外的主題選項。除了python,Pydev也支持Jython and IronPython。2. PyCharm – 最好的商業python IDEPyCharm是專業的python集成開發環境,有兩個版本。一個是免費的社區版本,另一個是面向企業開發者的更先進的專業版本。大部分的功能在免費版本中都是可用的,包括智能代碼補全、直觀的項目導航、錯誤檢查和修復、遵循PEP8規范的代碼質量檢查、智能重構,圖形化的調試器和運行器。它還能與IPythonnotebook進行集成,並支持Anaconda及其他的科學計算包,比如matplotlib和NumPy。PyCharm專業版本支持更多高級的功能,比如遠程開發功能、資料庫支持以及對web開發框架的支持等。
3. VIM
VIM是一個很先進的文本編輯器,在python開發者社區中很受歡迎。它是一個開源軟體並遵循GPL協議,所以你可以免費的使用它。
雖然VIM是最好的文本編輯器,但是它提供的功能不亞於此,經過正確的配置後它可以成為一個全功能的Python開發環境。此外VIM還是一個輕量級的、模塊化、快速響應的工具,非常適合那些很牛的程序員——編程從不用滑鼠的人。
初始化配置需要花一定時間,因為你需要安裝些VIM的插件,並配置讓他們正常工作,最後你會發現這一切都是值得努力的。如果你在尋找一個linux系統下的python IDE,那麼VIM將是你的不二選擇。
4. Wing IDE
WingIDE是另外一個商業的、面向專業開發人員的python集成開發環境,可以運行在windows、OS X和Linux系統上,支持最新版本的python,包括stackless Python(python的增強版)。Wing IDE分三個版本:免費的基礎版,個人版,以及更強大的專業版。
調試功能是Wing IDE的一大亮點,包括多線程調試,線程代碼調試,自動子進程調試,斷點,單步代碼調試,代碼數據檢查等功能,此外還提供了在樹莓派上進行遠程調試的功能。
在代碼管理方面,Wing IDE能非常靈活的與Git、subversion、perforce、cvs、Bazaar、Mercurial等工具集成。
此外,Wing IDE也支持其他更多的python框架,比如Maya、MotionBbuilder、Zope、PyQt、PySide、pyGTK、PySide、Django、matplotlib等等。
5. Spyder Python
SpyderPython是一個開源的python集成開發環境,非常適合用來進行科學計算方面的python開發。是一個輕量級的軟體,是用python開發的,遵循MIT協議,可免費使用。
Spyderpython的基本功能包括多語言編輯器、互動式控制台、文件查看、variable explorer、文件查找、文件管理等。Spyder IDE也可以運行於windows、Mac 或者 Linux系統之上。
雖然Spyder是一個獨立的集成開發環境,能運行在windows、MacOS 、MacOS X、Linux等系統之上。但是它也可以作為PyQT的擴展庫,可以嵌入到PyQT的應用中去。
6. Komodo IDE
Komodo是Activestate公司開發的一個跨平台的集成開發環境,支持多種語言包括python。它是商用產品,但是提供了開源的免費版本叫Komodo Edit,能夠安裝在Mac、Windows 和Linux系統上。
全功能的Komodo對教育機構用戶是免費的,老師和教授可以將其應用於實驗室及教學中。學生也可以通過較低的費用得到Komodo的授權許可。
㈥ Python web 開發一定要用框架嗎
Python web 開發不一定要用框架
因為Python Web框架也是Python開發出來的。只是為了減少重復造輪子,降低開發門檻。
1、Python 的 Web 並不作為語言的一部分實現。因為通用語言的設計目標,Python 通過 C extension 形式的標准庫,有原生的網路編程支持。也就是說,任何人都可以用 Python 的 socket 介面自己編寫 Web 伺服器。由於圖靈機的等價性,用 Python 實現一個 PHP VM 也是技術可行的。
2、但是絕大多數人用 Python 做 Web 開發的時候不會選擇自己用 socket 去實現一個伺服器,因為 Python 官方有 Web 設計的標准—— WSGI (PEP 333 python.org/dev/peps...)。WSGI 定義的標准將 Web 應用劃分為 WSGI Application 和 WSGI Server。後者類似 PHP 的 Web 運行時,提供對標准輸入輸出流的封裝,前者則類似自己寫的 PHP 應用,在封裝後的環境中對具體應用進行 Web 開發。強烈建議閱讀一下 PEP 333,對於理解 WSGI 的這種劃分很有幫助。
3、目前為止,WSGI 在主流 Python 應用中得到廣泛支持,所謂的 Python Web 框架,其實都是符合 WSGI Application 規范下,對Web開發中環境進行的封裝,如果有精力,閱讀一下 Bottle 框架的源碼,就會非常有收獲——只有一個文件,但是完整實現 WSGI 並封裝為自己風格的一個環境(一個 Bottle 的實例就是一個 WSGI Application,實現了 __call__ 方法)。像 Django 這種框架已經逾越了Web框架范圍的了,將 ORM、表單驗證等等聚集成一塊,有點像 RoR 的感覺。真正和 PHP 的 Web 環境等價的,是類似 Bottle 這樣的微內核框架。
㈦ python為什麼不適合web開發
python不適合web開發的原因:
1、性能堪憂。
寫個http server僅僅就輸出hello world,單機跑出一千的qps都夠嗆。而用netty,golang,nodejs隨便就上萬了。
而對於互聯網的web應用來說,性能就是生命線。qps上不去,用戶就會覺得卡頓,卡頓了還談個屁的用戶體驗。
當然也有一些方案可以增加性能,比如用非同步的tornado。但玩過之後發現稍好,性能依然比上面提到的技術低一個檔次。還有很偏門bjoern wsgi可以極大的提高http的性能,但這高出來的部分,是因為bjoern是用c寫的。但,一旦運行到用python寫的業務代碼時,又慢得跟截肢了似的。
性能低應該有兩方面的原因,
a.因為python的默認實現是單線程,並且很多重要的模塊就不支持多線程。所以利用多核較為困難。當然也不是沒有辦法,比如用多進程來利用多核。但多進程用起來還是不那麼順手。
b.python的實現性能不夠好吧。JavaScript當初也慢的可以卡出翔,後來google出手,搞出V8引擎,立即JavaScript快如閃電。最早的Java也是慢的跟蝸牛似的,後來SUN找牛人搞出了Hotspot虛擬機後,Java的性能立即發生質的飛躍。PHP最近都有極大的性能提升。但Python就是一直這么慢
2、Python的跨平台開發比較麻煩。
Python下要想實現跨平台開發非常麻煩。
一些擴展包在windows下安裝極其麻煩,比如PIL這個著名的圖像處理包,在windows上要找到這個安裝包都不容易,而且這個包已經不維護了,被一個叫pillow的包接替,但氣憤的是pillow這個包和PIL居然不是100%兼容的,還需要一些小改動。
另外的,有的包根本就不提供windows版,比如kyotocabinet,一個著名的的kv存儲引擎。這讓人非常頭疼。
現在團隊基本所有的人都是用windows開發,但程序部署卻是在linux上。
最終大家解決問題的辦法是在windows上裝個linux虛擬機,在虛擬的linux的上開發,這樣就可以保持伺服器和開發環境一致了。但這樣也是夠麻煩的,性能嚴重打折,虛擬機和物理機之間切換也極度麻煩。
更多Python知識請關注Python視頻教程欄目。
㈧ 如何部署python web程序
Python Web 程序的部署方案
綜合而言, 高性能的Python web站點部署方式首推 nginx + uwsgi
apache + mod_wsgi 是簡單穩定但性能一般的方式
API伺服器 可以直接使用tornado或者gevent
mod_python
非常原始的cgi模式部署python已經沒有什麼好介紹了。對於不太追求性能的管理系統和網站來說,使用 Apache 部署是一個不錯的選擇。較早的時候,使用 mode_python 部署python的web應用十分流行,在Django 0.96 的時候官方文檔甚至推薦這種方式。
它將Python解釋器嵌入到Apache server,以提供一個訪問Apache server內部的介面。mod_python 在現在看來性能是不佳的,每一個http請求 mod_python 都會由一個進程初始化python解釋器、載入代碼、執行、然後銷毀進程。
mod_wsgi
如果非要用Apache來部署python應用,mod_wsgi是一個更好的選擇。WSGI 全稱是 Web Server Gateway Interface ,由 PEP-333 定義。 基本上所有的python web框架都實現了wsgi介面,用mod_wsgi 能部署任何實現了wsgi的框架。實際上,不需要任何框架也可以用mod_wsgi 部署python程序。使用mod_wsgi的daemon模式,python程序會常駐內存,不會有很大的初始化和銷毀進程方面的開銷,所以性能是好於mod_python的。綜合來說,使用Apache部署python web程序,推薦使用mod_wsgi的daemon模式。
Fastcgi
先說觀點:不建議用fastcgi的方式部署Python web。
前幾年由於lighttpd風頭正勁和豆瓣的成功案例,fastcgi是一種很流行的部署方式。fastcgi與具體語言無關,也與web伺服器無關。是一種通用的部署方式。fastcgi是對於cgi的增強,CGI程序運行在獨立的進程中,並對每個Web請求建立一個進程。面對大量請求,進程的大量建立和消亡使操作系統性能大大下降。
與為每個請求創建一個新的進程不同,FastCGI使用持續的進程來處理一連串的請求。這些進程由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求通過一個socket比如FastCGI進程與web伺服器都位於本地)或者一個TCP connection(FastCGI進程在遠端的server farm)傳遞給FastCGI進程。
主流的web伺服器,Apache,lighttpd,nginx 都支持fastcgi,在幾年前,lighttpd的mod_fcgi模塊性能強勁,lighttpd+fastcgi十分流行。無論是python,ruby還是php,都有大量的站點使用這種方式部署。由於nginx的崛起,現在很少有人使用lighttpd了。
fastcgi 並不是專門為python設計,並不是所有的python框架天然的支持fastcgi,通常需要flup這樣的容器來配適。flup由python編寫,和專門的c實現的wsgi容器比起來性能顯得相當不堪。fastcgi的穩定性對於新興的wsgi容器來說也有差距。無論從哪個方面來看,部署python web程序,fastcgi 都已經是過去式。
uwsgi
前幾年nginx還未內置uwsgi模塊的時候,部署uwsgi還是一件挺麻煩的事情。隨著能夠在nginx中直接使用uwsgi模塊,uwsgi已經是最可靠,最方便的高性能python web程序的部署方式了。
在1U的四核XEON伺服器上,一個簡單的wsgi handler甚至能用AB壓到8000以上的qps,這已經是完爆tornado,接近gevent的性能了。 同時,uwsgi的穩定性極好。之前我們有個每天500w-1000w動態請求的站點使用uwsgi部署非常穩定,在一個渣HP 1U 伺服器上,基本不用管它。
上面提到的部署方式都是相對於web網站的方式,在移動互聯網的時代,我們需要的是高性能的API服務,上面這些都是過時的東西。
tornado
tornado 號稱高性能,如果拿他寫網站,其實一般般,只不過跟uwsgi加一些簡單框架差不多而已。它真正的作用,是用來寫API伺服器和長連接的伺服器。
由於tornado能夠直接處理http請求,很多人直接拿他來裸奔直接提供服務。這種方式是不可取的,單線程的tornado只能利用cpu的一個核心,並且一旦阻塞直接就廢了。通常情況下,由supervisor啟動多個tornado進程,通過nginx進行反向代理負載均衡。nginx 1.14 以後的版本反向代理支持長連接,配合tornado的comet效果很好。
tornado還有一些比較奇葩的用法,比如用來做wsgi容器之類的。
gevent
gevent是一個神器,能做的事情很多。在web方面,處理http請求,用起來其實跟tornado差不多,但是要簡陋很多,cookie之類的都沒有。用gevent寫的一些API服務,部署方式還是類似tornado,用supervisor管理多個守護進程,通過nginx做負載均衡。 同樣的它的奇葩用法也和tornado一樣,可以當wsgi容器用。
㈨ 如何用python做web開發 django環境配置
下載
python-2.7.2.msi
Django-1.3.1.tar.gz
Django暫時只支持python
2.4
~
2.7,
在Django-1.3.1\docs\intro\install.txt中有說明:
Being
a
Python
Web
framework,
Django
requires
Python.
It
works
with
any
Python
version
from
2.4
to
2.7
(e
to
backwards
incompatibilities
in
Python
3.0,
Django
does
not
currently
work
with
Python
3.0;
安裝python-2.7.2,並添加環境變數
D:\Python27;D:\Python27\Scripts;
命令行進入Django-1.3.1目錄,
安裝django
python
setup.py
install
Django提供了tutorial
Django-1.3.1\docs\intro
新建站點
E:\python>django-admin.py
startproject
mysite
啟動django自帶的web伺服器
E:\python>cd
mysite
E:\python\mysite>manage.py
runserver
Validating
models...
0
errors
found
Django
version
1.3.1,
using
settings
'mysite.settings'
Development
server
is
running
at
http://127.0.0.1:8000/
Quit
the
server
with
CTRL-BREAK.
在瀏覽器中輸入
http://127.0.0.1:8000/
瀏覽頁面
ps:
在windows7中按上述步驟配置好後,出現下列情況
D:\work\python>django-admin.py
startproject
mysite
Usage:
django-admin.py
subcommand
[options]
[args]
...
很顯然django-admin.py不參識別startproject命令,其它命令也不能識別。不過,另一種方式卻可以
D:\Python27\Scripts>python
django-admin.py
startproject
mysite
這說明django-admin.py
後面的參數不能傳遞進去,可以通過修改注冊表實現。
輸入regedit,
進入
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
,
"C:\Python26\python.exe"
"%1"
change
it
to
"C:\Python26\python.exe"
"%1"
%*
成功解決了
㈩ linux下python和webpy怎麼搭建
1. 環境搭建。
環境搭建比較繁瑣,記得當時也是滿世界找資料,所以我直接打包好了所有的文件(apache(已經放進去python-wscgi) + web.py+apache所需要的vs2010運行庫+python+網站文件),直接解壓放上去就能用。有需要同學讓我傳一個或者網盤發一把就行。
如果在windows,最好在win7以上版本,我用win8。linux則ubuntu較好,建議12.04以上版本,不過linux我僅僅是開發用過,最終運行的伺服器是採用windows+apache:
安裝python2.7.10,可以去官方網站下載,注意要把python路徑加入系統環境變數。版本不能低於2.7.9,但不能用3.0以上,web.py支持不好。
安裝web.py, 官方網下載來裝就行,記得是解壓後進去:python setup.py install
安裝wingIDE,這個是最好用的python編輯器,可惜只能有幾天試用,我就是不停的試用進行開發,用它的好處就是代碼可以跳轉並且支持調試,需要調試直接將程序文件run起來,單步下段點都可以。
裝apache並配置python-wscgi,這個比較慘,花了好多時間去搜索才搞定,主要是windows上的python-wscgi不好難找。
為了節省以後的開發時間,我把配置好的apache給打包了,反正也是綠色的,新建網站只需要在伺服器上配置開機啟動apache,並在apache的config裡面修改下自己網站路徑就行。
2. 開發。
開發階段倒是沒什麼好說的,web.py官方有教程,不過這里我需要提幾點建議:
如果可以務必全站用utf-8編碼。
建立資料庫建議寫個生成腳本,比如createDataBase.py,有改動重新運行一遍,不要試用ide去建。