modpythonrpm
1. windows安裝mod_python未生成mod_python.so
在windows上需要.so是非常奇怪的……因為那是linux下動態鏈接庫的拓展名。windows下是dll。
題主最好轉到linux下去做這些。
2. 怎樣得到在windows環境下與python2.7匹配可用的mod_python.so
http://archive.apache.org/dist/httpd/modpython/
去找,只有python2.5是編譯好的,其它的需要編譯,不過其實可以把文件中的python25.dll改為你想要的python27.dll,因為這幾個版本基本上是兼容的。
3. rpm的包依賴問題
您老可以在 rpm 命令行中加上 --force --nodeps 等強制參數, 不讓 rpm 檢查 dependencies 等, 但是這樣做的後果您老得自己承擔 ...
4. 我已經安裝python3.3.4+apache2.2,現在如何選擇mod_python的版本
Python的版本太高了,mod_python並不支持Python 3000以上的版本,http://modpython.org/ 建議可以選擇其它web伺服器,比如Nginx、Lighttpd之類的,現在國產的Kangle擴展性也很強。如果是採用框架,比如Django,在調試的時候可以直接使用Django內置的Python Web伺服器
5. linux配置apache和python的環境,mod_python在安裝的報錯處理,在線等!!
編譯過程鍾可能出現以上錯誤
解決方案:
修改src/connobject.c第142行
把!(b == APR_BRIGADE_SENTINEL(b) || 改為!(b == APR_BRIGADE_SENTINEL(bb) ||
你碰到的應該是這個情況吧?
/usr/local/lib/python2.5/config/libpython2.5.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
apxs:Error: Command failed with rc=65536
解決方案:
一定要確認編譯Python的時候有沒有加上--enable-shared,如果沒有,加上重新編譯
此時行Python可能出現以錯誤
python: error while loading shared libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file or
解決辦法:
新建下面文件
vim /etc/ld.so.conf.d/python2.7.conf
加入內容:
/usr/local/lib
保存退出後運行:
ldconfig
試下,有問題在找我。
6. apache+mod_python訪問py出錯
好久不用mod_python了。現在都用WSGI或者是UWSGI,這個更容易使用。
看你的提示,應該還沒有安裝好。似乎mod_python沒有裝上。缺少一個mod_python.apache模塊。
我印象中這個mod_python是要編譯的。也許需要apr模塊。 所以mod_python這個包載入後,會自已創建python解釋器。解釋器就是import mod_python apache,如果成功了就有一個callback。
但是,顯示解釋器退出了。因為你沒有mod_python.apache模塊。 你再查查看。
7. python中,mod_python到底做了些什麼呢
mod_python的確是一個讓python程序員能夠apache2寫一些網站的工具。它是一個介面。過去一些python寫的整站系統需要通過mod_python作為連接樞紐,將apache2與它們連接成web+app這樣的結構。
不過mod_python也可以自己直接的獨立寫網站。學一學沒有壞處。
不過現在,大多數情況下,mod_python已經被其它的方法代替了。比如django現在用wsgi或者是fastcgi連接。
mod_python的特點是效率高。可以管理自己對應的python進程,同時還有通信機制。
如果不是因為它有點點難用,我也會經常用。
好象是因為它配置起來,有時候沒有生效。我有些弄不明白。
你既然問到了mod_python,說明你python已入門了。正在向高手邁進。加油啦。
8. 怎樣將python程序及其依賴打包成rpm包部署
可以的,雖然說pip比較流行,但rpm從原理上完全可以覆蓋這些部署過程,只有一些小的要求:
所有環境的Python安裝方式必須一致,不能存在某些Python是2.6,某些是2.7,某些裝在/usr/local下面,某些在/usr/lib下面之類的情況
如果帶有C擴展的話,鏈接到的庫應當是來自某個rpm包的。如果沒有的話就簡單多了。
如果有依賴的其他Python包的話,需要把依賴的包也做成rpm;實在偷懶也可以打進同一個rpm中。
實際上發行版中有許多Python庫都以rpm的形式提供,不過一般我們嫌它版本舊,更傾向於用pip管理一組新的。
要寫一個rpm spec,可以從頭自己寫,也可以參考一些其他軟體的spec,我建議你採用後者,既然你們公司已經廣泛使用rpm了,那肯定有很多本公司的spec可以參考,也有人可以問。
回到話題,寫rpm spec,或者說rpmbuild的過程,分成以下步驟:
部署源代碼,一般來說將一個.tar.gz復制到SRC目錄中,然後用%setup宏就可以了,這個宏也基本上沒干什麼特別的事,就是把.tar.gz解壓縮了一下,然後進入相應目錄。.tar.gz只要從git中取出干凈的源代碼,整個目錄打成tar包就可以了。好像還有專門的git-archive命令。
build過程,對應C/C++項目中的./configure, make。對Python項目來說一般可以跳過,因為setup.py都會搞定。也可以選擇在這個階段使用setup.py進行build,build出一個wheel包來,這是我推薦的方法,因為wheel包和直接setup.py install的目錄結構有一些差異,而pip安裝默認是按照wheel的方式。也就是說在這一步調用:setup.py bdist_wheel。再精細一點可以指定build的目標為build目錄,這樣需要cleanup的時候容易一些。
install過程,對應C/C++項目中的make install。一般來說我們平時怎麼裝這個軟體,這一步就怎麼裝,所以我們也是使用setup.py。唯一的技巧在於,我們需要指定安裝的目標到rpmbuild根的某個目錄下面,而不是系統的目錄。這個目錄在install開始之前應當被清空。可以參考其他spec。對於我們來說,就是將Python的庫安裝到指定的目錄,而不是系統的site-packges當中。如果你在build這一步已經打包了wheel,那麼使用wheel install命令、指定目標文件夾就可以了。
打包過程,rpm的打包原理非常簡單,最開始install的目錄是空的,install完成後裡面有了一堆文件,那麼就按照文件列表將這一堆文件打包、然後指定每個文件將來應當安裝到什麼位置。對於Python項目來說,一般會安裝package名的目錄和EGGINFO兩個目錄,將這兩個目錄連同裡面所有的內容一起加入%files段就可以了。如果你要部署的是某個應用,一般你還會希望將init.d中的啟動腳本、或者 systemd的配置文件以及其他應用的配置文件一起部署了,可以在install的過程中將這些文件從源文件目錄中復制到目標文件夾里,然後加到files段裡面。
安裝、卸載腳本。表現為%pre, %post之類的段一般來說如果你有服務要安裝的話,需要在這里使用chkconfig, chkconfig on,或者systemd的話就是systemctl enable。如果你希望安裝完有個機會修改配置文件,可以選擇在首次安裝的時候不要啟動服務,而在update的時候啟動服務,這可以通過腳本傳進的第一個命令行參數$1進行判斷,0、1、2表示不同的情況(分別是卸載、安裝、更新,具體的記不清了),可以參考其他人寫的spec;也可以選擇安裝完永遠直接啟動,在post中使用service xxx start, 在preuninstall的時候使用service xxx stop。
rpm的功能還是很強大的,除了跟pip共通的功能以外,它有一個顯著的好處就是可以幫助你同時管理服務的配置、啟動和停止,從而簡化部署過程。不過要注意如果使用rpm的話就不要同時使用pip,否則pip更新過的庫,rpm卸載或更新時會沖突。
有第三方依賴的時候,一種方法是為每個依賴項寫一個獨立的spec,裡面內容都是上面這樣的直接調用setup.py,或者更簡單一些,在install的時候直接調用pip就可以;然後在需要這些依賴項的rpm包的spec當中寫上Require信息,跟pip體系的requirements差不多。偷懶也可以在同一個rpm中打了一堆Python包進去,但是如果有多個獨立安裝的rpm都打了同一個Python包,就會沖突,要注意。
其實用習慣了會覺得也不比pip差,需要跟非Python組件混合部署的時候反而會覺得簡單了很多。
9. Mod_Python的歷史
Mod_python起源於一個被稱為Httpdapy(1997)的項目。很長時間以來, Httpdapy並沒有被稱作mod_python,因為Httpdapy不是專門用於Apache的。 Httpdapy被設計成跨平台的,實際上最初是為Netscape server寫的(那個時候被稱為Nsapy)(1997)
這個Httpdapy的README文件的摘要,很好的闡述了在HTTP server中嵌入Python所帶來的挑戰和解決方案。
10. Mod_Python的介紹
mod_python是apache組織的一個項目,通過它,可以開發psp或cgi,mod_python功能強大,速度快,是非常優秀的web開發工具。