0x01 為毛用python.h努释?
python.h是基于python-devel的開發(fā)包星澳,比如你要用到c調(diào)用python去執(zhí)行一些任務(wù)揪利,這個時候python.h就是你的好幫手植锉。在我所理解一般用它都有兩個場景:
1. 借助語言優(yōu)勢解決問題泥栖;
2. 簡化開發(fā)難度,偷懶弧满;
在我這婆跑,我用它的主要目的在于加入掃描框架的依賴,畢竟lua的學(xué)習(xí)成本挺高的庭呜,如果正好這個安全人員不懂lua滑进,只懂python咋整?能不成讓他學(xué)習(xí)lua么募谎?成本是一個方面扶关,更多的是怎么快起來。一個團隊数冬,在快節(jié)奏下才能成長起來节槐。
0x02 坑坑洼洼的過程
正好手上有一臺機器,別人給我用來測試玩的拐纱,我就拿來做些調(diào)試和環(huán)境的測試铜异。還沒到生產(chǎn)環(huán)境,就遇到不少的坑秸架,當(dāng)時在線上環(huán)境也有測試揍庄,陪著運維的小哥一起搞,不斷的測試和調(diào)整东抹,折騰到很晚才搞成功蚂子,這里記錄下過程。
1.1 python.h錯誤異常
[root@cloud ~]# gcc b.c -I/usr/include/python2.7 -o xxx
b.c:11:27: 錯誤:Python/Python.h:沒有那個文件或目錄
b.c: 在函數(shù)‘great_function_from_python’中:
b.c:43: 錯誤:‘PyObject’未聲明(在此函數(shù)內(nèi)第一次使用)
b.c:43: 錯誤:(即使在一個函數(shù)內(nèi)多次出現(xiàn)府阀,每個未聲明的標(biāo)識符在其
b.c:43: 錯誤:所在的函數(shù)內(nèi)也只報告一次缆镣。)
b.c:43: 錯誤:‘pModule’未聲明(在此函數(shù)內(nèi)第一次使用)
b.c:43: 錯誤:‘pFunc’未聲明(在此函數(shù)內(nèi)第一次使用)
b.c:44: 錯誤:‘pArgs’未聲明(在此函數(shù)內(nèi)第一次使用)
b.c:44: 錯誤:‘pValue’未聲明(在此函數(shù)內(nèi)第一次使用)
默認(rèn)的情況下芽突,python.h應(yīng)該在這個位置试浙,但是測試的結(jié)果說找不到。內(nèi)心是崩潰的寞蚌,我在mac下是正常的田巴。
1.2 版本問題
用find命令找當(dāng)前系統(tǒng)中的python.h的版本钠糊,發(fā)現(xiàn)只有2.6的,但是我按照了python2.7,這個版本完全錯亂了壹哺。
[root@cloud ~]# find / -name Python.h 2>/dev/null
/usr/include/python2.6/Python.h
心想抄伍,坑啊~~ 為了解決問題,少不得需要重新編譯之類的屁事管宵,當(dāng)然截珍,我們也干了這事,最后發(fā)現(xiàn)仍然不行箩朴,參考的例子(知乎上的指引岗喉,坑b)如下:
wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xJf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --enable-shared --prefix=/usr/local/python2.7
make
make install
echo /usr/local/python2.7/lib > /etc/ld.so.conf.d/python2.7.conf
ldconfig
restorecon -RF /
0x03 解決方案
首先,你需要先把所有的python環(huán)境卸載炸庞,然后安裝同步的環(huán)境钱床,比如python2.7.12,devel也是python2.7.12埠居,還有就是libs也必須是查牌,不然弄不了,另外滥壕,編譯安裝默認(rèn)不靠譜纸颜,最好就是rpm的方式來。包我留下绎橘,有需要的玩懂衩。
https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/python27-2.7.12-1.ius.centos6.x86_64.rpm
https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/python27-devel-2.7.12-1.ius.centos6.x86_64.rpm
https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/python27-libs-2.7.12-1.ius.centos6.x86_64.rpm
這是我的解決方案,當(dāng)前完美解決我的問題金踪,另外浊洞,推薦大家按照這個方式來搞,特別在centos環(huán)境下胡岔,這個比較坑爹法希。