今天早上要在 LinuxMint 上面裝 Python 3,LinuxMint 雖然有 apt-get install python3,心血來潮決定自己手動編譯最新版本試試看,到 Python 官方 > Download > Python 3.3.3 compressed source tarball (for Linux, Unix or Mac OS X),下載了 Python-3.3.3.tgz,接著把他解壓縮出來後,chmod 設定一下資料夾權限,接著就開始進行手動編譯作業。
參考 README 文件提供的安裝步驟:
- ./configure
- make
- make test
- sudo make install
建議可以先 chmod 777 * 整個目錄,不然會有權限不足的問題(即使使用 root 身分)。
Python-3.3.3 # ./configure creating Modules/Setup creating Modules/Setup.local creating Makefile
接下來
Python-3.3.3 # make
make 測試了一堆項目,執行的過程發現有些項目會出現類似:
test_idle skipped — No module named ‘_tkinter’ test_idle skipped — No module named ‘…’
原本不以為意,不過把這訊息丟到 Google search 去,發現不少人遇到這個問題過,簡單的說就是 Python 3 有功能會需要相依這些軟體,如果不解決這問題的話,到時候有需要使用的時候,必須要重新編譯(ImportError: No module named … 的元兇),所以就開始著手解決問題。
舉 test_idle skipped — No module named ‘readline’ 這條訊息來說,缺了 readline 一定是先安裝 readline
Python-3.3.3 # sudo apt-get install readline-common readline-common 已經是最新版本了。
…… 開我玩笑嗎。
查了一下 Google 發現網路上一大票這種問題,典型的解決方案都是要我們編輯
./Modules/Setup.dist
./Setup.py
這幾個檔案或者使用 export PATH、LD_LIBRARY_PATH,等千奇百怪的方法。 實際試過之後,還是無法解決問題…。 整個很 Orz ,還在想要不要乾脆直接 apt-get install python3.2 算了。
想歸想,遇到問題還是得解決,之後一定還會有很多機會需要自己手動編譯,這也是 Linux-based 吸引人的特性之一(對於能夠認同 Open source 哲學的人來說)。
皇天不負苦心人,最後在茫茫資料中,看到了一個被發問者評為正確答案的回答。
I installed libncurses5-dev and libreadline5-dev, recompiled python and reinstalled (make / make install).
決定死馬當活馬醫,反正前面已經嘗試一堆沒有效果的方法了,多來一個也沒啥差別。
apt-get install libncurses5-dev libreadline5-dev make
Modules/Setup.dist is newer than Modules/Setup; check to make sure you have all the updates you need in your Modules/Setup file. Usually, copying Modules/Setup.dist to Modules/Setup will work.
running build running build_ext Python build finished, but the necessary bits to build these modules were not found:
_curses __curses_panel _tkinter
_lzma _ssl
To find the necessary bits, look in setup.py in detect_modules() for the module’s name.
To find the necessary bits, look in setup.py in detect_modules() for the module’s name.
(!), readline 竟然消失在列表上了,一定有啥巫術。
仔細看一下 apt-get install libncurses5-dev libreadline5-dev 這行,我發現了 libmodule name-dev 這樣的規則,好像發現新大陸一樣,一路試了:
例如,openssl
apt-get install libssl-dev
success!,以此類推,把 lib 後綽是 dev 的裝上去(查資料才知道,make 會需要用到開發包,開發包有包含 include 等開發會用到檔案的樣子),解決所有依賴問題,覆蓋一張 make install 完成 Python 3.3.3 安裝!
make install
手動編譯成功,截圖紀念:
快期中考了, 我竟然花一堆時間在搞這種東西 ……。
順帶一提,這篇文章是用 Logdown 的 Markdown 編輯器寫完,在丟過來餵給 Tumblr 的 Markdown 引擎,各種羨慕 Logdown 的 Markdown 編輯器 …。