
有時候,需要對python學(xué)習(xí)程序項目進(jìn)行打包,即僅打包python文件編譯后的pyc文件,就需要對python文件進(jìn)行編譯。那么python學(xué)習(xí)如何編譯呢?一起來了解下吧:
python學(xué)習(xí)如何編譯?
編譯方法有兩種:
1、寫一個python簡本,對所需編譯的文件進(jìn)行編譯。(針對比較多的文件,推薦該方法)比如:
import py_compile<br />
py_compile.compile("test.py")
2、直接使用python命令(若使用腳本進(jìn)行打包,而且文件少,可使用該方法)。例子如下:
python -mpy_compile test.py
怎么編譯Python源代碼?
通常在 Windows 下安裝軟件,只需要下載可執(zhí)行文件,一直下一步就可以完成安裝。而 Linux 下,你可以獲取軟件的源代碼,自行編譯生成可執(zhí)行文件進(jìn)行安裝。用源代碼有什么好處呢?你可以根據(jù)自己的需要對軟件進(jìn)行修改,甚至提前修補(bǔ) 已經(jīng)發(fā)現(xiàn)但廠商沒有更新 的漏洞。這也就是開源的好處。
源代碼就是用編程語言編寫好的程序,其實就是文本文件,可以通過文本編輯器進(jìn)行編輯。而可執(zhí)行文件是操作系統(tǒng)認(rèn)識的二進(jìn)制程序。要想將源代碼變成可執(zhí)行文件,就需要對源代碼進(jìn)行編譯。
C語言的編譯程序就是gcc
軟件的源代碼(文本文檔)+ 系統(tǒng)已有的函數(shù)庫,經(jīng)過編譯器的編譯,生成可執(zhí)行文件 函數(shù)庫是做什么的?如同 Python 會調(diào)用大量外部的模塊/庫幫助實現(xiàn)一些功能一樣,軟件也會用到系統(tǒng)的函數(shù)完成一些任務(wù),所以需要在編譯時寫入,以便程序執(zhí)行時調(diào)用。
一個軟件往往不僅有一個源代碼文件,如果手動對每一個源文件進(jìn)行編譯,太累了,好在有一個非常有用的工具make,可以自動完成編譯的過程。那么,make根據(jù)什么進(jìn)行編譯呢?他會在當(dāng)前目錄下搜索 Makefile/makefile 文件,這個文件中提供了所需的所有內(nèi)容。但這個文件并不是生來就有、一成不變的。
由于各種 Linux 系統(tǒng)內(nèi)部環(huán)境不同,軟件開發(fā)者會編寫一個自動檢測環(huán)境是否符合要求,為每種環(huán)境生成特定 Makefile/makefile 文件的程序,就是configure。
值得一提的是,當(dāng)源代碼修改后重新編譯時,make 能夠識別變動的部分,進(jìn)行增量更新。
源代碼是純文本文件,如果軟件開發(fā)者直接提供這些純文本文件,會浪費開發(fā)者的帶寬,也使得用戶不易下載。
所以,出現(xiàn)了 Tarball 文件,就是將軟件的所有源代碼先以 tar 打包,然后用壓縮技術(shù)壓縮,通常使用 gzip,所以一般擴(kuò)展名是*.tar.gz或*.tgz。不過后來出現(xiàn)了壓縮效率更高的 bzip2,所以擴(kuò)展名也會有*.tar.bz2之類。
Tarball 文件通常包含:
./configure --enable-framework=/Users/ronald/Library/Frameworks
setup.py missing.append
刪除安裝目錄 rm -rf /usr/local/bin/xxx
64位系統(tǒng)如何編譯Python?
如果在64位系統(tǒng)下默認(rèn)執(zhí)行./configure編譯python會使用32位的動態(tài)庫,當(dāng)安裝mod_wsgi或者mod_python時會出錯,這時候需要重新編譯python來解決此問題。
下載python源碼。比如2.6.5或2.6.6。
解壓后configure:
./configure --prefix=/usr/local --with-threads --enable-shared --enable-universalsdk
--prefix選項表示把目標(biāo)編譯到/usr/local這個目錄中。
a. 如果只用./configure命令,那默認(rèn)會編譯出靜態(tài)的.a以及32位的動態(tài)庫。 b. 最后一個選項非常重要。如果這個選項不加,那只會編譯出32位的庫。
3. make &&make install
這時執(zhí)行python,很有可能會報一個錯:
libpython2.6.so.1.0:
cannotopen shared object file: No such file or directory
這是因為編譯的libpython2.6.so.1.0是在/usr/local/python2.6/lib里面,可以做一個到/usr/lib64的軟鏈接,或者直接把它復(fù)制過去就行了。
或者也可以這樣:
echo‘/usr/local/python2.6/lib’ > /etc/ld.so.conf.d/opt-python2.6.conf
接著執(zhí)行
ldconfig
最后可以通過以下命令驗證是否存在64位的libpython:
ldconfig–p | grep python
看有沒有類似“l(fā)ibpython2.6.so.1.0(libc6,x86-64) => /usr/local/python2.6/lib/libpython2.6.so.1.0”的輸出。
注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://www.hebeijilong.cn/news-id-24574.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實性請自行核實或聯(lián)系我們,了解更多相關(guān)資訊請關(guān)注python培訓(xùn)頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費申請試課。關(guān)注官方微信了解更多:150 3333 6050