[心得]SUSE OS上ImportError的解決方法

看板Python作者 (花心只是掩飾內心的空虛)時間10年前 (2015/12/14 19:05), 10年前編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/1
今天在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

12/14 21:06, , 1F
這麼會變成自己編譯 python,這個作法似乎有點走偏了
12/14 21:06, 1F

12/14 21:09, , 2F
抱歉看錯作者意思,原來作者是要自己編譯一份新的python
12/14 21:09, 2F

12/14 21:30, , 3F
自編譯 Python 建議使用 make altinstall 而非 install
12/14 21:30, 3F

12/14 21:30, , 4F
預設安裝會覆蓋 /usr/bin/python, 可能使系統元件毀損
12/14 21:30, 4F
多謝提點,不過我的/usr/bin/python的部分並沒有被覆蓋到, 我想應該是我下了--prefix=/usr/local/python3.5 參數的關係吧? ※ 編輯: sexyrickysky (140.136.176.152), 12/14/2015 23:19:26

12/14 23:42, , 5F
12/14 23:42, 5F

12/14 23:42, , 6F
可以多版本 Python 共存,像 Jython 之類的也可裝
12/14 23:42, 6F

12/14 23:43, , 7F
pyenv 的 wiki 部分要看一下,要不然會編譯不起來
12/14 23:43, 7F

12/15 14:00, , 8F
喔, 沒注意到你有指定 prefix, 這樣應該就沒問題, 比較
12/15 14:00, 8F

12/15 14:00, , 9F
麻煩的只是要用絕對路徑才能使用, 不能靠 PATH 環境變數
12/15 14:00, 9F
文章代碼(AID): #1MRg9kYq (Python)
文章代碼(AID): #1MRg9kYq (Python)