作者sexyrickysky (花心只是掩飾內心的空虛)
看板Python
標題[教學]Linux 上Python ImportError的解決方法
時間Mon Dec 14 19:05:13 2015
今天在SUSE上安裝Python 3.5的時候遇到了
ImportError: No module named readline的問題
花了不少時間GOOGLE,才把問題解決掉。
所以分享給遇到類似問題的鄉民,順便留下記錄,方便以後查詢XD。
先從如何在SUSE上安裝Python 3.5講起好了
1. 下載Python 3.5,並解壓縮
網址:
https://www.python.org/ftp/python/
(自行尋找對應的版本e.g x86 or amd64)
2.進入解好壓縮的Python 3.5資料夾,並設置Python的安裝目錄
指令:
sudo ./configure --prefix=/usr/local/python3.5
(等號後面的路徑取決於你想安裝的地方)
3.開始編譯Python
指令: sudo make instal
接著會出現一大串編譯訊息,等它跑完成即可。
4.將當前版本的Python,加入至環境變數$PATH中(非必要)
指令:
su (切換成root)
echo $PATH (查看系統預設路徑)
ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python3.5 (建立link)
5. 進入Python3.5
指令:python3.5
如果看到ImportError: No module named 'readline',就表示python 沒有被正確安裝
這個原因可能是缺少了libreadline函示。
解決辦法:
指令
sudo zypper ar "
http://download.opensuse.org/repositories/shells/SLE_11_SP3/shells.repo"
(增加repo. source)
sudo zypper in readline-devel
(安裝 libreadline函示)
PS:zypper是SUSE的套件安裝管理工具。"in" 表示安裝的意思。
6. 重新進入python 3.5後,
應該就會看到ImportError: No module named 'readline'消失了。
--------------------------------Part II--------------------------------------
補足其他缺少的函示庫:
雖然安裝readline-devel 後,可以解決進入python IDLE後顯示ImportError的問題,
但這不代表所有的python所需的函示都已經被正確安裝。
仍須進一步查看,python缺少哪些函示。
1.先回到python 3.5的解壓縮資料夾,並輸入指令make,
如果有缺少函示,應該會顯示類似下列的訊息:
The necessary bits to build these optional modules were not found:
_bz2 _lzma _sqlite3
_ssl _tkinter zlib
舉例來說:
_lzma是壓縮模組所需的函示庫,這個可以透過安裝xz-devel套件補足
_sqlite3 則代表需要安裝sqlite3-devel套件
2.搜尋repo裡面,是否有所需的套件(e.g. xz-devel)
指令:
zypper se XZ (在repo裡面,搜尋含有XZ字元的package)
搜尋結果如下:
S | Name | Summary | Type
--+----------+------------------------------------------+-----------
| xz | A Program for Compressing Files | srcpackage
i | xz | A Program for Compressing Files | package
| xz-devel | Development package for the LZMA library | package
i | xz-lang | Languages for package xz | package
3. 安裝缺少的套件
指令
zypper in xz-devel (如果所需套件有在清單內,則直接安裝)
4. 剩餘缺少的套件,以此類推。
PS1:
如果reop內,搜尋不到所需套件,
可以去suse 官網下載開發者套件的光碟iso檔
網址:
https://download.suse.com/index.jsp
將下載好的iso檔,掛載到mnt底下,
指令:
sudo mount -t iso9660 -o loop SUSE_11_SDK.iso /mnt/iso/
將/mnt/iso加到repo內
指令:
zypper ar /mnt/iso SUSE_11_SDK
PS2:
_tkinter這個函示,除非有涉及到開發圖形界面或要使用idle,
否則不一定要安裝。
(指令:zypper in tk-devel)
ref:
http://tinyurl.com/zvfrhvq
http://stackoverflow.com/questions/12023773/python-3-3-source-code-setup-modules-were-not-found-lzma-sqlite3-tkinter
https://en.opensuse.org/SDB:Zypper_usage_11.3
https://download.suse.com/index.jsp
http://anjsimmo.blogspot.tw/2014/10/how-to-install-python-34-from-source-on.html
http://www.savedba.com/?p=704
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.136.176.152
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1450091118.A.8B4.html
※ 編輯: sexyrickysky (140.136.176.152), 12/14/2015 21:01:39
→ kenduest: 這麼會變成自己編譯 python,這個作法似乎有點走偏了 12/14 21:06
→ kenduest: 抱歉看錯作者意思,原來作者是要自己編譯一份新的python 12/14 21:09
→ uranusjr: 自編譯 Python 建議使用 make altinstall 而非 install 12/14 21:30
→ uranusjr: 預設安裝會覆蓋 /usr/bin/python, 可能使系統元件毀損 12/14 21:30
多謝提點,不過我的/usr/bin/python的部分並沒有被覆蓋到,
我想應該是我下了--prefix=/usr/local/python3.5 參數的關係吧?
※ 編輯: sexyrickysky (140.136.176.152), 12/14/2015 23:19:26
→ Neisseria: 可以多版本 Python 共存,像 Jython 之類的也可裝 12/14 23:42
→ Neisseria: pyenv 的 wiki 部分要看一下,要不然會編譯不起來 12/14 23:43
→ uranusjr: 喔, 沒注意到你有指定 prefix, 這樣應該就沒問題, 比較 12/15 14:00
→ uranusjr: 麻煩的只是要用絕對路徑才能使用, 不能靠 PATH 環境變數 12/15 14:00