日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
從一件小事看Python

一件關(guān)于Python開發(fā)的小事,折騰了一天還是失敗了,是Python難搞還是有別的原因?且看……

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、民勤網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、民勤網(wǎng)絡(luò)營銷、民勤企業(yè)策劃、民勤品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供民勤建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

近日用webpy開發(fā)了一個小Web應(yīng)用,用到了PIL(一個圖形庫)。在把它部署到正式的Linux服務(wù)器之前,我覺得有必要在Windows上先“仿真”測試一下,用Windows+Apache+WSGI+webpy+PIL環(huán)境測試一下這個Web應(yīng)用。但不幸的是,這個測試環(huán)境最終沒有搭建成功。

我的Windows開發(fā)環(huán)境下有Python2.5/2.6/2.7三個版本。我一直使用2.5作為默認(rèn)的Python版本。那個Web應(yīng)用也是在2.5下開發(fā)的。而且我的Linux服務(wù)器上也用2.5。

我遇到的***個問題是:Windows上WSGI只有兩個官方binary,分別對應(yīng)Python2.6和2.7,沒有2.5。對我來說,如果要維持一貫的Python環(huán)境(包括服務(wù)器部署環(huán)境),就必須自己編譯WSGI的Python2.5版本。這件事非常麻煩:首先是必須使用跟Python2.5的binary相同的編譯器——VC2003(這種古董我都沒地方去找,我機器上只有VC2010)。其次還要找到所有相關(guān)的(且正確的)C鏈接庫,如libhttpd.lib等。如果我使用官方的WSGI binary,我只能把環(huán)境轉(zhuǎn)換到高版本的Python,雖然這仍然意味著不少工作——包括服務(wù)器環(huán)境的整體升級等等,但我考慮再三,決定還是升級Python。

但我馬上就遇到了第二個問題:PIL庫的官方binary在Python2.7上不能工作!在加載_imagingft時會報告錯誤“ImportError: DLL load failed”。用depends工具檢查發(fā)現(xiàn)缺少MSVCR90.dll,就到MS的網(wǎng)站上下載了VC++ 2008的 Redistributable Package。但安裝后問題依舊。抓狂!其后一度研究了自行編譯PIL,發(fā)覺這事兒也不簡單,遂放棄,繼續(xù)找問題原因。***還真讓我找著了https://bitbucket.org/effbot/pil-117/issue/1/windows-build-of-_imagingft-module-fails-to。簡單說就是:PIL官方binary編譯有問題:_imagingft.pyd(動態(tài)鏈接庫)鏈接的是MSVCR90.dll的DEBUG版本(話說這個問題存在一年以上了,官方就不管管嗎)!所以即使安裝了VC2008的Redistributable Package也沒用(DEBUG版本不在發(fā)行版中)!解決辦法就是用二進制編輯器修改嵌在DLL里的manifest(這個辦法我覺得較危險),或者用mt.exe工具從DLL導(dǎo)出manifest,修改后再導(dǎo)入DLL。mt.exe的用法可參考MSDN文檔http://msdn.microsoft.com/en-us/library/aa375649(v=vs.85).aspx。

解決了這兩個問題,大半天過去了。就在我以為萬事俱備的時候,第三個問題出現(xiàn)了,并且一劍封喉:在Apache的WSGI環(huán)境下PIL還是可恥的加載失敗了——在import _imaging的時候,報告“ImportError: DLL load failed”。我再次抓狂了:我打開Python控制臺,直接import imaging,沒有問題。那么問題再哪兒?從日志上看,Python及其庫的路徑是沒問題的。那么問題再哪兒?問題可能在這兒:http://groups.google.com/group/modwsgi/browse_thread/thread/59612820615eceaf,Graham(WSGI的作者)在這個帖子里說:

That is, Python 2.6+ links to newer MS C runtime library that Apache doesn’t and C extension modules which are somehow dependent on the newer MS C runtime library will not load properly.

就是:Apache鏈接的C動態(tài)庫與Python2.6+不同,因此后者的C擴展庫(比如_imaging)不能工作在前者的環(huán)境里。解決的辦法是:

If I am sort of right, the solution may be to relink mod_wsgi.so for Windows with dependency on new MS C runtime library.

就是要重新編譯WSGI!問題又回到了原點!

從這件事情上,我看到的是:Python在Windows上問題重重,考慮到數(shù)不清、理還亂的C運行時庫問題以及復(fù)雜的編譯環(huán)境。相對而言,Linux的情況要好很多:借助于方便的安裝包功能,即使需要編譯安裝的Python庫也比較容易處理(BUG也比Windows要少)。

后記:

在Linux服務(wù)器上,我的Python+WSGI+Apache的環(huán)境還算順利,但是Windows上做相同的事情看來難很多。但是應(yīng)用的開發(fā)、測試需要一個同實際相當(dāng)?shù)沫h(huán)境,如果在Windows上開發(fā)、測試時用簡易Web服務(wù)器,部署時采用Apache+WSGI,顯然是不大合適的。那么,最終的解決方式,看來就是在Linux上做開發(fā)。不過要我舍棄經(jīng)營多年的Windows,仍然不是一件輕易的事情。


本文題目:從一件小事看Python
本文路徑:http://www.dlmjj.cn/article/cdcccpd.html