作者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://webptt.com/cn.aspx?n=bbs/Python/M.1450091118.A.8B4.html
※ 编辑: sexyrickysky (140.136.176.152), 12/14/2015 21:01:39
1F:→ kenduest: 这麽会变成自己编译 python,这个作法似乎有点走偏了 12/14 21:06
2F:→ kenduest: 抱歉看错作者意思,原来作者是要自己编译一份新的python 12/14 21:09
3F:→ uranusjr: 自编译 Python 建议使用 make altinstall 而非 install 12/14 21:30
4F:→ 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
6F:→ Neisseria: 可以多版本 Python 共存,像 Jython 之类的也可装 12/14 23:42
7F:→ Neisseria: pyenv 的 wiki 部分要看一下,要不然会编译不起来 12/14 23:43
8F:→ uranusjr: 喔, 没注意到你有指定 prefix, 这样应该就没问题, 比较 12/15 14:00
9F:→ uranusjr: 麻烦的只是要用绝对路径才能使用, 不能靠 PATH 环境变数 12/15 14:00